Автор рассказывает о проблемах первой версии плагина Grabbit для Unity и о том, как они были решены в Grabbit 2. Grabbit — это редакторский инструмент: он временно добавляет физику к объектам в сцене, позволяет их «ронять» и симулировать, а затем убирает физику, оставляя результат как финальное расположение для левел-дизайна и сет-дрессинга.
Основные проблемы Grabbit 1
Монолитный и хрупкий код. Первая версия представляла собой один инструмент примерно на две тысячи строк, выросший органически. Это приводило к типичным для монолита режимам отказа и усложняло поддержку.
Мусор после сбоев. Модель работы: «добавить временную физику, симулировать, удалить». Если Unity Editor перекомпилировал скрипты или падал во время сессии, финальный этап очистки мог не выполниться. В сцене оставались лишние Rigidbodies и изменённые настройки объектов.
Проблемы с производительностью на больших сценах. Не было пространственной структуры, поэтому стоимость операций росла плохо с размером сцены. При большом количестве объектов инструмент начинал заметно тормозить.
Ненадёжный Undo. Изменения, сделанные физикой, не всегда корректно откатывались. Для редакторского инструмента это критично: дизайнер должен уверенно жать Ctrl+Z.
Неудобная интеграция в рабочий процесс. Grabbit 1 жил в отдельном Editor Window. Каждый раз приходилось переключаться из сцены в окно инструмента, что ломало поток работы и стоило времени.
Что изменилось в Grabbit 2
Надёжная очистка после сбоев. Grabbit 2 записывает достаточно состояния, чтобы распознать прерванную сессию. При следующей загрузке он находит оставшуюся временную физику и автоматически восстанавливает объекты. Дополнительно есть кнопка однокликовой очистки на случай, если что-то всё же пропустили.
Масштабируемая производительность. Добавлен постоянный пространственный кэш. Временные коллайдеры не создаются каждый раз заново, а берутся из пула. Выпечка (baking) выполняется параллельно, а симуляция запускается только для объектов рядом с текущим выделением, что существенно снижает стоимость на больших сценах.
Полная интеграция с Unity Undo. Теперь каждое изменение проходит через стандартную систему Undo Unity. Это делает поведение Ctrl+Z предсказуемым и безопасным для пользователя.
Интеграция в сценовый тулбар. Вместо отдельного окна Grabbit 2 встраивается в Scene Toolbar. Его можно закрепить рядом с основными инструментами, не теряя контекст сцены и не переключаясь между окнами.
Автор подчёркивает, что эти улучшения не выглядят эффектно, но именно они превращают «классный прототип» в инструмент, которому можно доверить реальный продакшен-проект.
Выводы
- Монолитные, органически выросшие тулзы приводят к хрупкости и сложным отказам — архитектура важна даже для «внутренних» инструментов.
- Для редакторских плагинов критична надёжная очистка состояния после падений и перекомпиляций.
- Производительность на больших сценах требует пространственных структур, пулов и параллельной обработки.
- Интеграция со стандартным Undo — обязательное условие доверия к любому инструменту редактирования.
- Встраивание в основной UI (Scene Toolbar) снижает трение и повышает реальное использование тулза в пайплайне.