Unity 6.3
0 онлайн 55 гостей 3 в системе
Вход
Практическое руководство по разработке игр в Unity Глава 8 из 25 Оригинал, стр. 22

Организация проекта

Организация проекта По мере роста проекта необходимо поддерживать такой уровень организации, который позволит масштабировать его с учётом размера команды и требований приложения. Эти общие рекомендации помогут заложить базовую структуру проекта и сцен. Окно Project В окне Project отображаются все файлы, связанные с проектом. Это каталог содержимого, где находятся ресурсы и другие файлы приложения. Unity хранит исходные файлы непосредственно в проекте вместе с отдельными файлами .meta. В файлах .meta содержатся связанные с ресурсом данные, необходимые движку и Unity Editor. Unity также импортирует каждый ресурс в оптимизированный формат, который движок использует во время выполнения. Обработанные ресурсы помещаются в папку Library: она служит кэшем, и добавлять её в систему контроля версий не нужно. В окне Project есть несколько элементов интерфейса, упрощающих навигацию: - Щёлкните правой кнопкой мыши, чтобы открыть контекстное меню часто используемых команд: создания и импорта ресурсов, показа полного пути на диске и других.

- По мере роста проекта используйте поле Search для поиска ресурсов. Чтобы найти ресурсы определённого типа, примените фильтр с синтаксисом t:. Например, t:Material покажет все ресурсы материалов в проекте. Это упрощает навигацию по крупным проектам. - Перетащите часто используемую папку в область Favorites в верхней части интерфейса. Результат поиска также можно сохранить в Favorites с помощью кнопки Save Search. - Можно изменить и компоновку самого окна. Откройте меню More Items в правом верхнем углу и выберите One Column Layout или Two Column Layout. В двухколоночном режиме есть

дополнительная панель с визуальным предпросмотром каждого файла.

Одноколоночный и двухколоночный режимы

В окне Project находится папка Assets. Она содержит ресурсы, используемые при сборке игры. Если проект создан из шаблона, внутри должны быть подпапки для нескольких распространённых типов ресурсов. Большинство этих папок определяет пользователь, однако Unity резервирует некоторые имена для специальных целей. Обязательно ознакомьтесь со списком специальных имён папок. Ниже перечислены распространённые подпапки для организации проекта. Конкретный набор зависит от предпочтений команды и особенностей проекта. Главное - будьте последовательны: составьте руководство по стилю и придерживайтесь его.

Анимация

В этой папке хранятся клипы анимации и файлы их контроллеров, а также ресурсы Timeline для внутриигровых кинематографических сцен и данные рига для процедурной анимации.

Аудио

К звуковым ресурсам относятся аудиоклипы и микшеры, используемые для сведения эффектов и музыки.

Editor

Здесь находятся скриптовые инструменты для Unity Editor, которые не включаются в целевую сборку.

Шрифты

Шрифты, используемые в игре.

Gizmos

Значок Gizmo помогает увидеть GameObject в окне Scene или Game, особенно если у него нет меша. Файлы изображений для таких значков храните в папке Gizmos.

Материалы

Эти ресурсы описывают свойства затенения поверхности.

Меши

Здесь хранятся модели, созданные во внешнем приложении для создания цифрового контента (DCC).

Частицы

Управляйте в Unity симуляциями частиц, созданными с помощью Particle System или Visual Effect Graph.

Prefab

Многократно используемые GameObject с заранее настроенными компонентами. Добавляйте их на сцену, чтобы собирать уровни и элементы игрового процесса.

Скрипты

Здесь находится весь написанный пользователями код игрового процесса.

Сцены

Unity хранит небольшие функциональные части проекта в ресурсах сцен. Обычно они соответствуют игровому уровню или его части.

Настройки

Здесь хранятся параметры конвейеров рендеринга HDRP и URP.

Шейдеры

Эти программы выполняются на GPU как часть графического конвейера.

Текстуры

Файлы изображений могут содержать текстуры материалов и поверхностей, элементы интерфейса и карты освещения со сведениями об освещении.

ThirdParty

Ресурсы из внешних источников, например Asset Store, храните отдельно. Так сторонние ресурсы и скрипты проще обновлять. Их фиксированную структуру иногда нельзя изменять.

Пример сцены из шаблона HDRP содержит несколько папок ресурсов.

На странице руководства «Поддерживаемые типы ресурсов» распространённые ресурсы описаны подробнее. В качестве примера эффективной организации папок можно использовать проекты Template или Learn. Вы не обязаны ограничиваться перечисленными именами папок, но этот список станет хорошей отправной точкой, которую можно расширять по мере роста проекта. Разумеется, структуру папок можно адаптировать к потребностям конкретного проекта и предпочтениям команды, как показано на рисунке ниже.

Организуйте папки в соответствии с потребностями проекта, но, выбрав структуру, придерживайтесь её.

Структура папок и именование Единственного правильного способа организовать проект нет, однако мы рекомендуем придерживаться следующих общих правил: - Документируйте соглашения об именовании и структуру папок.

Руководство по стилю и/или шаблон проекта упрощают поиск и организацию файлов. - Какое бы соглашение об именовании вы ни выбрали, обязательно соблюдайте

его последовательно. Не отступайте от выбранного руководства по стилю или шаблона. Если правила именования всё же нужно изменить, обработайте и переименуйте все затронутые ресурсы одновременно с помощью скрипта. - Не используйте пробелы в именах файлов и папок. Инструменты командной строки Unity

могут некорректно работать с путями, содержащими пробелы.

- Отделяйте области тестирования и экспериментов. Создайте отдельную папку

для сцен, не предназначенных для выпуска, и экспериментов. Подпапки с именами пользователей помогут разделить рабочую область между участниками команды. - Не создавайте лишних папок в корне. Обычно храните материалы

в папке Assets. Не создавайте дополнительные папки в корне проекта без крайней необходимости.

Сцены В Unity вы работаете с содержимым в сценах. Они содержат объекты игры и могут представлять главное меню, отдельные уровни и многое другое. В каждой сцене размещаются окружение, препятствия и декорации, обычно соответствующие одному уровню игры. Так приложение можно проектировать и собирать по частям, сохраняя модульность.

Файлы сцен сами являются ресурсами и хранятся на диске. Если для Asset Serialization выбран режим Force Text, они представлены текстовыми файлами; в противном случае по умолчанию используется двоичный формат. Сцена часто представляет уровень игры или его часть. Демонстрационные и простые игры могут состоять всего из одной сцены, но в большинстве коммерческих игр для каждого уровня используется отдельная сцена со своим окружением, персонажами, пользовательским интерфейсом и другими элементами.

В проекте можно создать любое количество сцен, однако их структура способна существенно повлиять на производительность. Подробнее об организации сцен и производительности рассказывается в нашем руководстве по оптимизации производительности на мобильных устройствах. Чтобы представить разные части игры и наполнить приложение содержимым, потребуется создавать, загружать и сохранять сцены. Типичный «поток сцен» предполагает загрузку другой сцены по событию. Например, после щелчка по элементу интерфейса сцена меню может загрузить основную игровую сцену. Сцены можно загружать по одной либо разделить элементы между ними и использовать аддитивную загрузку.

При создании новой сцены Unity позволяет выбрать один из шаблонов сцен. Например, HDRP 3D Sample Scene поставляется с несколькими шаблонами. Можно определить собственные шаблоны сцен, чтобы ускорить работу и предоставить всем участникам команды одинаковый исходный набор ресурсов и настроек.

Шаблоны сцен в HDRP

Unity предоставляет SceneManagement API для загрузки сцен и управления ими из скриптов. Подробнее о потоке сцен рассказывается в этом руководстве Learn.

Окно Hierarchy Окно Hierarchy отображает все GameObject в загруженной сцене. Среди них могут быть модели, камеры и экземпляры Prefab. Чтобы изменить родительско-дочерние связи GameObject, просто перетащите его. При добавлении или удалении объектов в окне Scene они также добавляются в Hierarchy или удаляются из него, и наоборот. Во время выполнения Hierarchy может показывать несколько загруженных сцен, каждая со своими GameObject.

Общие рекомендации по сценам и иерархиям - Используйте именованные пустые GameObject как разделители. Тщательно организуйте сцены, чтобы объекты было легко находить. Не создавайте лишние GameObject: каждый из них влияет на производительность. Соотносите удобство структуры с затратами и не усложняйте иерархию без необходимости.

Пример сцены из шаблона HDRP содержит несколько папок ресурсов.

- Располагайте поверхность мира на уровне y = 0. Тогда объекты проще ставить на землю. Для игровой логики, ИИ и физики рассматривайте мир как двумерное пространство в плоскости XZ.

- Разделяйте динамические и статические объекты. Объекты, создаваемые во время выполнения, удобно хранить под пустым контейнером. Неподвижную геометрию уровня разместите в другой части иерархии: так проще применять разные методы освещения, например lightmap и Light Probe.

- Правильно задавайте родительско-дочерние связи. Группируйте объекты по назначению и руководствуйтесь здравым смыслом: например, колёса должны быть дочерними объектами кузова автомобиля. Избегайте лишней вложенности - более плоская иерархия обычно производительнее. Пустые GameObject служат разделителями иерархии.

- Размещайте служебные Prefab и пустые GameObject в начале мировых координат. Если Transform не задаёт позицию объекта, оставляйте его в точке (0, 0, 0): это упрощает код и преобразования между локальными и мировыми координатами.

Стандарты именования Хотя единого стандарта именования GameObject не существует, примите во внимание следующие правила и рекомендации для своего проекта. Правило

Пример

Используйте понятные имена без сокращений. Выбирайте варианты, которые легко произнести, запомнить и понять другому участнику команды.

largeButton, LargeButton или leftButton

Используйте camelCase или PascalCase. Не ставьте пробелы в именах объектов: это повышает читаемость и точность набора.

OutOfMemoryException, dateTimeFormat

Не злоупотребляйте подчёркиваниями и дефисами. Они полезны для вариантов и состояний; начальное подчёркивание ставит имя первым по алфавиту.

Активные состояния: EnterButton_Active EnterButton_Inactive

Не: lButton

Не: Outofmemoryexception, datetimeformat

Карты: Foliage_Diffuse Foliage_Normalmap Уровни детализации: Building_LOD1 Building_LOD0

Числовые суффиксы используйте только для элементов последовательности.

Для пути: Node0, Node1, Node2 и т. д.

Следуйте правилам именования из дизайн-документа.

HighSpellTower RedDragonLair

Как и любые правила именования, выберите подходящий для вашей команды вариант и применяйте его последовательно.