Выбирайте операцию по тому, что изменилось.
Повторить Build
Совместимые Element и VisualElement сохраняются. Mount-local State не сбрасывается.
Создать свежий корень
Новое дерево монтируется, старое освобождается. Локальное состояние mount сбрасывается.
Если новый корень не удалось смонтировать, Restart оставляет прежний экран активным.
Rebuild не компилирует изменённый исходный код.
После сохранения C# Unity должна обновить и загрузить managed assemblies. Обычная перезагрузка assembly уничтожает прежние экземпляры классов, поэтому продолжить тот же MountHandle через эту границу нельзя.
Method-patching решение может заменить поддерживаемые тела методов, после чего Rebuild повторит builders. Новые поля, изменение типов и generic layout всё равно требуют полной компиляции и restart.
Регистрируйте preview callbacks рядом с MountHandle.
private IDisposable? _previewToolbar;
private void ConnectPreviewTools() {
_previewToolbar = PlayModePreviewToolbar.Register(
reload: () => _mount?.Rebuild(),
restart: () => _mount?.Restart(CreateApplication()));
}Освободите регистрацию до освобождения mount. Callback не должен удерживать уже уничтоженный host.
Сначала посмотрите, какая ветвь реально смонтирована.
Откройте Window › LumaFlow › Widget Inspector. Для отчёта об ошибке получите immutable snapshot через MountHandle.CaptureDiagnostics() и скопируйте дерево.
MonoBehaviour связывает два жизненных цикла.
Компонент, владеющий UIDocument, также владеет MountHandle и toolbar registration. Widget приложения не должен хранить VisualElement или самостоятельно вызывать Mount.