Структура проекта Unity: какие папки нужны игре и как организовать собственные файлы
В папке проекта находятся Assets, Library, Packages и ProjectSettings. Через несколько недель рядом появляются сборки, временные файлы и чужие наборы ресурсов. Если воспринимать всё это как одинаково важные исходники, резервные копии быстро растут, а найти нужный файл становится трудно.
Разберём две структуры: служебные каталоги Unity и вашу организацию игры внутри Assets. Первая помогает сохранять проект правильно, вторая — работать с ним каждый день.
ТОП-5 курсов обучения Unity:
Корень проекта: кто за что отвечает
- Каталог: Assets. Назначение: Ресурсы и код проекта с метаданными. Как обращаться: Сохранять и передавать вместе с .meta.
- Каталог: Packages. Назначение: Сведения о пакетах и встроенные локальные пакеты, если используются. Как обращаться: Сохранять manifest и lock-файл; учитывать реальные зависимости.
- Каталог: ProjectSettings. Назначение: Настройки проекта и версия Editor. Как обращаться: Сохранять вместе с исходниками.
- Каталог: Library. Назначение: Импортированные и подготовленные данные. Как обращаться: Обычно восстановима из сохранных исходников.
- Каталог: Temp, Logs и другие служебные каталоги. Назначение: Временная работа и диагностика. Как обращаться: Не принимать за основной набор ресурсов.
Это типовой состав, а не универсальный список всех значимых файлов. Если у проекта есть собственный конфигурационный файл в корне или локальная зависимость за его пределами, её тоже нужно учитывать. Формальный архив трёх каталогов не поможет, если необходимый пакет был оставлен в другой папке.
Почему .meta относятся к исходникам
Unity сохраняет рядом с ресурсом метаданные, включая идентификатор, по которому другие ресурсы могут ссылаться на него. Удаление .meta и последующее создание нового файла метаданных может привести к потере прежней связи. Механизм описан в документации метаданных.
Например, сцена хранит ссылку на материал. После переноса одного изображения без нужных метаданных оно может получить другой идентификатор, и связанный ресурс потребуется восстановить. По имени файла такую проблему не всегда видно.
Внутри проекта перемещайте ресурсы через окно Project. Если переносите файлы внешним способом, сохраняйте пары ресурсов и .meta, включая метаданные папок. При работе с Git следите, чтобы изменения этих файлов попадали в один понятный коммит.
Простая структура для первой игры
Для небольшого проекта можно начать с понятных каталогов:
Game отделяет собственные ресурсы от внешних наборов. В Art находятся исходные изображения и модели, в Prefabs — настроенные объекты, в Scenes — сцены. Если внешний пакет требует сохранить свою структуру, не переносите его файлы только ради красивого дерева: сначала проверьте инструкцию автора.
Главное требование — предсказуемость. Другой человек должен понимать, где находится контроллер игрока и где его prefab, без чтения всей истории проекта.
Когда удобнее группировать по функциям игры
При росте проекта папка Scripts с сотнями файлов становится неудобной. Можно организовать ресурсы по областям: Player, Enemies, Inventory, Levels и Shared. Тогда код, prefabs и данные одной механики находятся рядом.
Например, Inventory содержит модель предмета, представление ячейки, настройки и нужные prefabs. Shared хранит действительно общие элементы, а не всё, что пока не удалось классифицировать.
Переходите к такой структуре, когда она сокращает поиск и разделяет ответственность. Для игры с тремя скриптами сложная иерархия папок способна затруднить работу сильнее, чем помочь.
Сцены и prefabs решают разные задачи
Сцена хранит конкретное расположение и настройки игрового пространства. Prefab сохраняет повторно используемый объект. Если один и тот же враг размещён в нескольких уровнях, подготовленный prefab помогает поддерживать общую конфигурацию.
Не путайте исходный prefab с экземпляром в сцене. У экземпляра могут появиться overrides — отличия от исходных значений. При изменении поведения сначала определите, должно ли оно меняться у всех врагов или только у одного.
Пример небольшой структуры сцены и связанных скриптов есть в руководстве по первой игре.
Специальные папки не являются обычными названиями
Некоторые имена Unity использует для специального поведения, например Editor, Resources и StreamingAssets. Перед созданием такой папки изучите её назначение. Назвать весь код Editor ради удобства значит изменить условия его включения в приложение.
Ресурсы в Resources имеют особый способ загрузки и включения; StreamingAssets предназначена для файлов, которые нужны с определённым способом доступа в готовой игре. Не помещайте в них все ресурсы «на всякий случай». Для обычной сериализованной ссылки на prefab специальная папка не требуется.
Что хранить в Git
Сохраняйте исходники, метаданные, настройки и сведения о зависимостях. Обычно не хранят в истории Library, временные каталоги, локальные журналы и заново генерируемые файлы среды разработки. Как отправную точку можно изучить Unity.gitignore из репозитория github/gitignore.
Перед исключением собственного каталога проверьте его реальное содержимое. Папка с названием Builds может содержать только результаты сборки, а может случайно хранить нужный пользовательский скрипт. Автоматическое правило не заменяет эту проверку.
Коммит должен отражать законченное изменение: например, сцена и prefab с нужными настройками, скрипт и связанные данные. Если оставить часть изменений локально, другой человек не воспроизведёт результат.
Можно ли удалить Library
Unity обычно может восстановить Library из исходников, но повторный импорт занимает время. Удаление этого каталога не является универсальным исправлением ошибок. Сначала выясните, относится ли проблема к импорту или к коду и настройкам.
Если вы решили пересоздать кэш, закройте Editor и убедитесь, что исходники и настройки сохранны. Не удаляйте похожую по названию папку без проверки полного пути. Ошибка в скрипте после повторного импорта останется той же ошибкой.
Как проверить, что проект действительно передаваем
Подготовьте отдельную чистую копию из сохранённых исходников, добавьте её в Hub и откройте указанной версией. Дождитесь восстановления данных, проверьте Console и сделайте сборку. Если проект работает только из одной старой папки на вашем компьютере, ищите недостающую зависимость.
Запишите версию Editor, способ получения пакетов и основные шаги запуска в небольшом README. Подробности типов файлов и форматов разобраны в статье о файлах Unity, а сами пакеты — в руководстве Package Manager.