Scene conflict workflow

Как безопасно разрешить merge conflict Unity-сцены в Git

Конфликт Unity-сцены редко бывает только текстовой проблемой. Безопасное разрешение сначала сохраняет три версии, использует Smart Merge как отправную точку, проверяет структуру объектов и ссылки и валидирует результат в Unity до commit.

7 Wolves 29 июля 2026 12 мин чтения Merge conflicts

Почему scene conflict — не только текст

Файл .unity содержит документы GameObjects, компонентов и других serialized objects. fileIDs связывают компоненты с владельцами, GUIDs — внешние ассеты, а Transform relationships формируют иерархию. Поэтому разные строки YAML могут менять одну логическую структуру.

Порядок, reparenting, delete-vs-edit и prefab overrides — типичные случаи, когда синтаксически корректный YAML все равно семантически неверен.

Безопасный workflow из восьми шагов

  1. Остановите редактирование: не сохраняйте конфликтующую сцену снова.
  2. Проверьте status: зафиксируйте файл, branches и uncommitted changes через git status.
  3. Сохраните Base/Ours/Theirs: экспортируйте три revisions в отдельные временные файлы.
  4. Не отбрасывайте сторону сразу: не применяйте ours или theirs ко всему файлу без проверки.
  5. Запустите UnityYAMLMerge: используйте Smart Merge как первый структурный merge.
  6. Проведите semantic review: сравните иерархию, компоненты, свойства, ссылки и prefab overrides.
  7. Валидируйте в Unity: импортируйте проект, откройте сцену, проверьте Console и связанные workflows.
  8. Сделайте точечный commit: включите только conflict resolution и необходимые meta changes.

Как читать Base, Ours и Theirs

Base — общая исходная версия, Ours — версия текущего checked-out branch, Theirs — входящая версия. Эти названия не означают «правильно» и «неправильно».

MergeSight для прозрачного ревью scene conflicts показывает три входа как Unity-объекты и позволяет принимать решение по каждому изменению, а не по всему файлу.

Что проверить после merge

  • Не были ли GameObjects случайно удалены, продублированы или переименованы.
  • Верны ли parent-child relationships и root order.
  • Принадлежат ли компоненты правильным GameObjects.
  • Указывают ли GUID и fileID references на существующие объекты и ассеты.
  • Сохранились ли prefab instances, source links и overrides.
  • Нет ли Missing Scripts, conflict markers и новых Console errors.

Также запустите важные Play Mode или Edit Mode tests. Импортируемый ассет еще не гарантирует правильное поведение уровня.

Когда merge нужно отбросить и начать заново

Остановитесь, если Base/Ours/Theirs нельзя однозначно определить, YAML parser падает, object identity неоднозначна или требуется массовая ручная очистка markers. Вернитесь к сохраненным входам и разрешите конфликт небольшими воспроизводимыми шагами.

Как уменьшить будущие scene conflicts

  • Разделяйте крупные levels на additive scenes с четкой ownership.
  • Выносите повторно используемые системы из общей scene в prefabs.
  • Выборочно блокируйте high-risk assets и заранее согласовывайте параллельные изменения.
  • Делайте небольшие commits и часто синхронизируйте branches.
  • Добавьте review scenes и prefabs и validation в pull requests и CI.

Частые вопросы

Как разрешить merge conflict Unity-сцены в Git?

Сохраните Base, Ours и Theirs, запустите UnityYAMLMerge как первую структурную попытку, проведите semantic review и откройте сцену в Unity. Делайте commit только после проверки references, иерархии и Console.

Что выбрать для Unity-сцены: ours или theirs?

Только если одна сторона должна полностью заменить другую и команда подтвердила это по смыслу. Обычно обе стороны содержат полезные изменения, которые нужно проверить по объектам.

Может ли UnityYAMLMerge решить любой scene conflict?

Нет. Delete-vs-edit, неоднозначная object identity, сложные изменения иерархии или поврежденные входы могут требовать ручных решений и дополнительной validation.

Почему merged scene открывается, но все равно неверна?

Синтаксически валидный YAML может содержать неверную иерархию, references, component ownership или prefab overrides. Поэтому структуру и поведение нужно проверять отдельно.

Как предотвращать scene conflicts в Unity?

Сочетайте additive scenes, prefab ownership, выборочный locking, небольшие commits, частую синхронизацию и semantic review. При реальной параллельной работе полностью исключить конфликты нельзя.

Выводы

Сохраняйте все три входа

Base/Ours/Theirs делают решения воспроизводимыми и позволяют безопасно начать заново.

Проверяйте структуру, а не только YAML

Иерархия, компоненты, overrides и references определяют реальный смысл изменений.

Последняя проверка — в Unity

Import, Console, tests и проверка level intent должны пройти до commit.