В редакторе OK, сборка падает: Unity MCP, Console и Missing Script
Unity works in editor, fails on build: Play в порядке, Player/Android падает. Слои Console, Build Settings, сериализованные ссылки; Cursor + Unity MCP только на чтение.
- Unity MCP
- Unity
- Console
- build
- Android
- Cursor
- troubleshooting
- AI game development
В редакторе OK, сборка падает — с чего начать
Unity works in editor, fails on build (Play в порядке, Player / Android — краш или NRE): чаще всего ссылки и Build Settings, а не «сломанный MCP».
Три шага:
- Console / стек → скрипт и объекты сцены
- Build Settings, Missing Script, сериализованные поля None
- Cursor + Unity MCP — только чтение; правки после вашего подтверждения
Не путайте: «MCP Running, но Editor не в active instances» — другая проблема, не падение сборки.
См. также:
- Установка Unity MCP
- Как подключить Cursor к Unity через MCP
- Подключение HUD из AI Studio к событиям здоровья
Без установки плагина и полного пайплайна в стор. IL2CPP stripping и нативные плагины — в приложении в конце.
Сначала: на каком слое сбой?
A. Красное окно сборки (ошибка компиляции / упаковки)
↓
B. Пакет собирается, устройство падает / чёрный экран при запуске
↓
C. Игра запускается, падает в сцене или при конкретной функции (runtime)
| Что видите | Слой | Сначала смотрим здесь |
|---|---|---|
Сборка падает, error CS… / тип не найден | A | Runtime-сборка ссылается на UnityEditor, условная компиляция, asmdef |
| NRE / MissingReference в стартовой сцене | B/C | Сцена в сборке, Missing Script, None в Inspector |
Падает только на Resources.Load / аддитивной сцене | C | Регистр пути, ресурс в пакете, сцена загружена |
Unity MCP силён на открытом редакторе: Console, Hierarchy, поля компонентов. logcat / Xcode с устройства нужно вставить в Cursor; или сначала Development Build и по возможности воспроизвести ту же стартовую сцену в Editor.
Цикл отладки (ручная проверка + MCP)
При каждом сбое — по порядку. Не пропускайте ручной этап и не просите AI переписать Player.
Шаг 0: Зафиксировать сцену вручную (~2 мин)
До Cursor:
- Запишите версию Unity и цель (например Android / IL2CPP)
- Очистите Window → General → Console, затем Build или Development Build один раз
- Скопируйте первую релевантную Error (со стеком) — не стену Warning
- Откройте File → Build Settings: подозрительная сцена отмечена? Индекс 0 — стартовая сцена?
- Если меняли Prefab: сделали ли Apply на экземпляре? Неприменённые оверрайды часто не попадают на диск и не в чужой пакет
Шаг 1: MCP, только чтение — классификация Console
Суммируйте Error в Console, связанные с этой сборкой / последним Play (Info игнорировать).
Классифицируйте: ошибка компиляции / Missing Script / NullReference / загрузка ресурса.
Для каждой ошибки укажите путь скрипта, строку, имя GameObject (если есть в логе).
Не изменяйте ресурсы.
Шаг 2: Ручная проверка + MCP — «тройка ссылок»
Для runtime NRE (B/C) откройте объект из стека в редакторе и сверьте с MCP:
| Вручную | Промпт MCP |
|---|---|
| Список сцен Build Settings (скрин или устно) | «Перечислите пути сцен в Build Settings и флаги enabled; укажите стартовую сцену.» |
| Inspector: Missing Script / ссылки None | «В сцене <Name> перечислите Missing Script; проверьте сериализованные поля <Object>.<Component> на None. Только таблица. Не редактировать.» |
| Prefab-ассет vs экземпляр в сцене | «<X> — Prefab-ассет или экземпляр в сцене? Есть неприменённые оверрайды (если видны)? Только отчёт.» |
Правило: в пакет идут сцены/Prefab с диска. Временные подстановки через OnValidate, которые «выглядят нормально» в Editor, не считаются — доверяйте сериализованным значениям из MCP/Inspector.
Шаг 3: Шаблон диагностики, затем подтверждение
[Ограничения]
- Сначала диагноз и минимальный план; ждать моего ОК перед правками
- Не маскировать исправление массовым GameObject.Find
- Трогать только скрипты/Prefab/сцены, связанные с этой Error
[Контекст]
- Editor Play: OK / сломано (честно)
- Платформа и сборка: …
- Стартовая сцена в Build Settings: …
- Console / стек с устройства (как есть):
<вставить>
[Ответить]
1. Слой A / B / C
2. 1–2 наиболее вероятные причины (не в сборке / None / Missing Script / регистр / Editor API…)
3. Объекты и имена полей для моей проверки
4. Минимальные шаги исправления (ещё не выполнять)
Шаг 4: Минимальная запись после подтверждения + перепроверка
Применить подтверждённое минимальное исправление: только <объект.поле> или несколько строк в <путь скрипта> для этой Error.
Сохранить сцену/Prefab.
Затем только чтение: поля всё ещё None? Та же Error в Console?
Полный пример: от NRE-стека к полю
Ниже реалистичный лог устройства/Player (типичная структура; пути под свой проект).
Лог
NullReferenceException: Object reference not set to an instance of an object
at HudHealthView.HandleHealthChanged (System.Single current, System.Single max) [0x00000] in Assets/Scripts/UI/HudHealthView.cs:42
at PlayerHealth.TakeDamage (System.Single amount) [0x00000] in Assets/Scripts/Combat/PlayerHealth.cs:28
at DebugDealDamage.Update () [0x00000] in Assets/Scripts/Debug/DebugDealDamage.cs:15
Слой
- Дошли до
Updateв Play/пакете → не A (компиляция OK) - Падает при уроне → C (runtime); подозрение на UI-ссылки, не «переписать бой»
Вручную
- Сцена с HUD в Build Settings?
- Открыть сцену, выбрать объект с
HudHealthView;healthFill/playerHealth— None? - Меняли Prefab: Apply?
Для MCP
Только чтение: открыть сцену с HUD.
1. Найти объекты с HudHealthView
2. Сообщить, None / Missing ли healthFill, playerHealth (и аналоги)
3. Не редактировать
Если None: минимальный план — переназначить ссылки и сохранить, а не менять логику TakeDamage.
Минимальное исправление (после ОК)
- Перетащить Image
HUD_HealthFill→healthFill,PlayerHealthс Player →playerHealth - Сохранить сцену; Development Build и снова получить урон
Плохое «исправление» (не делать)
// Антипаттерн: Find скрывает None — сломается при переименовании / аддитивной загрузке
healthFill = GameObject.Find("HUD_HealthFill").GetComponent<Image>();
Правильная проводка: HUD → события здоровья. Здесь нужно: зафиксировать поле по стеку, затем перепривязать.
Матрица симптомов (опорная линия)
Симптом 1: Красная сборка — тип не найден / UnityEditor
| Вероятная причина | Вручную | MCP |
|---|---|---|
| Runtime-скрипт использует Editor API | Файл вне Editor/? | «Искать UnityEditor. вне папок Editor; только пути.» |
Перепутан #if, в Player нет типов | Проверить обёртки UNITY_EDITOR | «Какие типы видны в Editor vs Player для этого файла?» |
| Пробел в asmdef | Открыть .asmdef с ошибкой | «Список ссылок asmdef; чего не хватает?» |
Антипаттерн (Editor API в runtime-сборке → сборка Player падает):
using UnityEngine;
using UnityEditor; // Сборка падает, если не Editor-сборка
public class BadBake : MonoBehaviour
{
[MenuItem("Tools/Bad")] // ещё зависимость от UnityEditor
static void Run() { }
}
Исправление A: весь файл в Editor/
Assets/Scripts/Editor/BakeTools.cs ← только редактор
Исправление B: изоляция в одном файле (только если нужен общий файл)
using UnityEngine;
public class RuntimeSafe : MonoBehaviour
{
public void DoGameplay() { /* видно Player */ }
#if UNITY_EDITOR
[ContextMenu("Debug/Fill Refs")]
void EditorOnlyFill()
{
// Только редактор — не полагаться на это в Awake как на данные для пакета
}
#endif
}
Чище: скрипты только для Editor + asmdef, чтобы runtime-сборки не тащили Editor-ссылки.
Симптом 2: NRE на устройстве при входе в сцену; Editor Play «вроде нормально»
Проверять по порядку — без параллельного мегарефакторинга:
- Сцена не в Build Settings или не та стартовая
- Missing Script / сериализованный None (включая неприменённый Prefab)
- Аддитивная сцена не загружена до Find / доступа
- Регистр пути
Resources.Load(macOS Editor часто без учёта регистра; Android — с учётом)
1. Сообщить список сцен Build Settings, флаги enabled, индекс стартовой
2. Все Missing Script в сцене <X>
3. Публичные ссылки GameManager / Player / HUD на пути запуска — None?
Только отчёт, без правок.
| В редакторе | В пакете | Типичная причина |
|---|---|---|
| Ссылки выглядят заданными | Runtime None | Оверрайды экземпляра не Apply; правили не тот файл сцены |
Find находит | На устройстве null | Объект в незагруженной сцене; несовпадение имён |
Resources.Load OK | На устройстве null | Регистр пути; ресурс не в Resources/ |
// На диске: Assets/Resources/UI/HealthBar.png
// Часто падает на Android (несовпадение регистра):
Resources.Load<Sprite>("ui/healthbar");
// Должно совпадать с путём под Resources, например:
Resources.Load<Sprite>("UI/HealthBar");
Найти строки путей Resources.Load / Addressables.LoadAssetAsync в проекте;
составить таблицу сравнения регистра с реальными относительными путями. Код пока не менять.
Симптом 3: Console засыпан Missing Script
Сканировать сцену <X> и Prefab <path>:
Перечислить пути GameObject с Missing Script.
Для каждого: предложить вернуть исходный скрипт или удалить пустой компонент (по остаточному имени/GUID, если видно).
Не удалять пакетно автоматически.
Вручную: в Project убедиться, что файл скрипта на месте, asmdef/GUID не сломаны; подтверждать по одному перед удалением пустых компонентов.
Чеклист приёмки
- Похожие Error исчезли из Console
- Editor Play проходит тот же падающий путь (вход в уровень, урон, UI…)
- Один Development Build на цель (или локальный Player)
- MCP только чтение: подозрительные поля больше не None / Missing
- Git diff — только ожидаемые мелкие правки сцены/Prefab/скрипта, без «заодно рефакторинга»
Только чтение: на <список объектов> остались None или Missing Script? Перечислить исключения. Не редактировать.
Красные линии промптов
| Не делать | Делать |
|---|---|
| «Просто сделай Play» | Слой A/B/C + поле по стеку |
Массовый Find вместо ссылок | Чинить сериализованные поля или явную инъекцию |
| Менять порядок Build Settings без спроса | Сначала отчёт о текущем списке и стартовой сцене |
| «Есть NRE» | Вставить первые 20–40 строк стека |
Границы продукта
- Unity MCP: Console, Hierarchy, скрипты и ссылки в редакторе — опорная линия этой статьи.
- AI Studio: UI-структура в движок; после реэкспорта перепривязать по статье о проводке — не искать UI из геймплея через Find.
- Сертификаты, сторы, ROM вендоров: вставить текст лога в Cursor для помощи в чтении; вне зоны правки сцен MCP.
Приложение: часто, но вне опорной линии
Сначала исключите опорную линию этой статьи:
| Симптом | Направление |
|---|---|
| Development OK, Release падает | Managed Stripping / link.xml; MCP: «Угадать вырезанные типы по стеку краша; предложить link.xml; файлы пока не писать.» |
| Только нативный краш Android (неуправляемый стек) | .so / разрешения / Gradle; вставить logcat для чтения |
| Unity API не в главном потоке | Проверить, возвращаются ли async-колбэки в главный поток |
Не смешивайте stripping и Missing Script в один «большой рефакторинг».
Часто задаваемые вопросы
Unity works in editor, fails on build — почему?
Play использует открытые сцены редактора; Player — только сцены из Build Settings и сериализованные ссылки на диске. Часто: сцена не в списке, Missing Script, поле None.
Нужен ли Unity MCP для этого?
Не обязателен, но ускоряет чтение Console и Hierarchy из Cursor. Установка: Unity MCP.
Editor OK, но MCP не видит Unity?
Это не эта статья — см. active instances.
Development Build OK, Release падает?
Часто Managed Stripping / link.xml — см. приложение ниже; сначала исключите Missing Script.
Итог
- Editor OK / пакет сломан → сначала ссылки / сцены в сборке / пути / Editor API
- Вручную зафиксировать Build Settings и первую Error, затем MCP только чтение
- Стек → строка скрипта → поле компонента; перепривязать или удалить пустые компоненты после подтверждения
- Не маскировать
Findи переписыванием геймплея - Принять через Development Build + перепроверку только чтением
Прогон «зафиксировать → слой → тройка ссылок → поле как в примере» сжимает большинство ref-багов на устройстве до небольшого diff для ревью.
Читайте дальше
Другие статьи, которые могут вам понравиться
Дизайн игрового UI: традиционный процесс против AI-арта + разделение в VberAI Studio
Сравнение ручной нарезки в PS/Figma и VberAI Studio: импорт или AI-генерация UI, авторазделение слоёв, экспорт слоёного PSD или наборов изображений. Эффекты, шаги и демо-видео.
- game-ui-design
- game-ui-designer-flow
- ui-slicing
- AIGC
Godot vs Unity vs Cocos MCP: игровые движки с ИИ и выбор моста
Игровые движки с MCP для ИИ: сравнение Godot, Unity и Cocos Creator MCP — установка, лицензия, сценарии. Cocos Creator и Unity — что лучше для вашего проекта, не «единый победитель».
- Godot MCP
- Unity MCP
- Cocos MCP
- MCP
AI-интерфейс игры: не редактируйте Prefab YAML — используйте Canvas для экспорта в Unity / Godot / Cocos
Почему LLM не должны читать или писать Prefab YAML при сборке игрового UI с помощью ИИ. Промежуточный слой, детерминированный экспорт и путь Canvas в VberAI Studio из Figma / PSD в Unity, Godot и Cocos Prefab.
- game-ui-design
- game-dev-ai
- ui-to-engine
- figma-to-unity