Файлы Unity: что хранится в .unity, .prefab, .asset и .meta и как не потерять ссылки

В проекте Unity один файл редко существует в одиночку. Рядом с картинкой находится .meta, сцена ссылается на prefab и материалы, а пакеты задаются отдельными JSON-файлами. Поэтому перенос «только нужных картинок и скриптов» может разрушить связи.

Разберём основные типы файлов и действия, которые сохраняют их идентичность. Организация папок рассматривается отдельно; здесь главное — значение файлов и их связей.

ТОП-5 курсов обучения Unity:

Исходные assets и данные Unity

.cs содержит исходный C#-код. Изображения, аудио и модели импортируются редактором с заданными настройками. Результат импорта отличается от оригинального файла и может зависеть от платформы.

.unity хранит сцену, .prefab — prefab asset, .mat — материал. Расширение .asset используется для разных сериализованных данных Unity, включая многие ScriptableObject и настройки.

Расширение asset не говорит само по себе, какую игровую роль выполняет объект. Выберите его в Project и посмотрите тип и содержимое Inspector. Одинаковая форма файла может хранить настройки оружия и совершенно другой служебный объект.

Зачем нужен .meta

Unity создаёт metadata для assets и папок. В .meta находятся идентификатор GUID и информация об импорте. Ссылки проекта опираются на идентичность asset, поэтому сохранение только исходной картинки не гарантирует сохранение её связей.

Если .meta исчезнет, Unity может создать новый GUID. Сцена или материал, которые ссылались на старый, потеряют нужную связь. Простое возвращение прежнего имени файла не обязательно восстановит идентификатор.

Устройство metadata описано в официальной документации. Практическое правило: переносите asset вместе с его .meta и сохраняйте их в контроле версий.

Как перемещать и переименовывать

Предпочитайте Project window: Unity переносит metadata вместе с объектом и обновляет расположение. После переноса проверьте изменения Git и ссылки в сцене.

Если перемещаете файлы внешним инструментом, переносите обе части вместе и не создавайте копии с одинаковым GUID внутри одного проекта. Для большой операции удобно закрыть Editor, выполнить согласованный перенос и снова дождаться импорта.

Не редактируйте GUID вручную ради быстрого устранения Missing. Сначала восстановите исходную пару из резервной копии или истории Git. Изменение идентификаторов требует понимания всех связанных ссылок.

Что хранится в Packages и ProjectSettings

Packages/manifest.json описывает прямые зависимости проекта. packages-lock.json фиксирует разрешённый граф зависимостей. Оба файла важны для воспроизведения окружения.

В ProjectSettings находятся настройки проекта, а ProjectVersion.txt записывает номер Editor. При передаче проекта эти данные нужны вместе с Assets.

Папка Library содержит генерируемые данные и cache. Она не заменяет оригинальные assets, настройки и сведения о пакетах. Структура корневых папок подробно разобрана в статье о проекте.

Текстовый формат и конфликты

При текстовой сериализации многие сцены и prefab представлены структурированным текстом, часто YAML. Это помогает видеть изменения и выполнять merge, но файл не становится простым списком независимых строк.

Ссылки, локальные file ID и вложенные данные связаны между собой. Ручное удаление строки может привести к повреждению смысла. Для конфликтов Unity предоставляет специализированные возможности, включая UnityYAMLMerge; после любого merge открывайте результат и проверяйте сцену.

В команде полезно уменьшать пересечение изменений: разные небольшие сцены, prefab и согласованное владение крупными бинарными assets. Это организационная мера, которая помогает даже при хорошем инструменте merge.

Файлы проекта и файлы сохранения игрока

Scene asset — часть разработки. Сохранение прогресса игрока — данные runtime, которые приложение пишет подходящим способом. Нельзя считать, что изменение объекта в Play автоматически переписывает готовую сцену в сборке.

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

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

Что делать при Missing

Уточните, потерян ли asset, script или только назначение поля. Проверьте ошибки компиляции, историю удаления и наличие исходной metadata. Восстановите файл с правильным .meta, дождитесь импорта и проверьте ссылки.

Если восстановить идентичность невозможно, назначайте новую ссылку осознанно и проверьте все места использования. Массовое переназначение «похожего» файла может скрыть ошибку, особенно у prefab variants и нескольких материалов.

Для контроля версий используйте согласованные правила исключений, например Unity.gitignore. Исключение генерируемых данных экономит место, а сохранение Assets, Packages и ProjectSettings позволяет восстановить проект.

Документация