Розробка інструментів для швидкої розстановки об'єктів графики в сцені
Дизайнер рівнів для VR-проекту розставляє 300 об'єктів вручну через стандартний Unity Transform gizmo. Кожен об'єкт—позиція, ротація, масштаб руками. На одну кімнату йде два дні. Це не проблема художника—це проблема відсутності інструменту. Кастомний Editor Tool скорочує це час до кількох годин, розробляється один раз на весь проект.
Що входить у кастомний placement tool
Unity Editor Tools API (доступний з 2021.2 через EditorTool базовий клас) дозволяє створити інструмент з повністю кастомним Handles-інтерфейсом у Scene View. Для розстановки об'єктів у VR-сценах типовий набір функцій:
Snap to surface. Об'єкт ставиться на будь-яку поверхню сцени через Physics.Raycast з точки курсора—підлога, стіни, похилі площини. Без цього кожен об'єкт потрібно вручну підіймати або опускати по Y, щоб він не провалився в підлогу та не висів у повітрі. Реалізується через HandleUtility.GUIPointToWorldRay() + Physics.Raycast() в OnToolGUI() з подальшим Undo.RecordObject() для підтримки Ctrl+Z.
Randomized placement. Щелчок лівою кнопкою обирає випадковий префаб з набору, випадкову ротацію в заданому діапазоні, випадковий масштаб. Для organic-looking сцен—кущі, камені, мусор—інструмент робить те, що вручну займало б годинами.
Grid and radial distribution. Обрав площу—інструмент розставив об'єкти по сітці або окружності з заданим кроком та випадковим jitter. Корисно для регулярних структур: паркан, колони, лампи.
Alignment helpers. Вирівнювання обраних об'єктів по X/Y/Z, розподіл з рівним інтервалом між крайніми об'єктами. Стандартний Unity Align Tools цього не вміє в потрібному вигляді.
Реалізація через EditorWindow та EditorTool
Для складних інструментів з UI—EditorWindow + SceneView.duringSceneGui callback. Вікно містить список префабів (малюється через GUILayout з превью через AssetPreview.GetAssetPreview()), налаштування рандомізації, кнопки включення режимів.
Важливий момент для VR-проектів: інструмент повинен враховувати VR-специфіку розстановки. Об'єкти у VR видні зі всіх сторін—потрібна функція автоматичної перевірки «не перетинається ли об'єкт з іншими» через Physics.OverlapBox() або Physics.OverlapSphere(). Перетинення виділяється червоним highlight через Handles.DrawWireCube() прямо в Scene View—дизайнер видить конфлікти негайно.
Serialization стану інструменту—через EditorPrefs для простих налаштувань або ScriptableObject для збереження пресетів розстановки між сесіями. Команда з 3 осіб може шарити пресети через VCS.
Кейс: інструмент розстановки NPC в VR-escape room
Для одного проекту—escape room на 8 комнат—потребувався інструмент розстановки інтерактивних об'єктів з автоматичним назначенням InteractionZone компонента. Клік по поверхні—об'єкт ставиться, до нього автоматично додається XRGrabInteractable, налаштовується InteractionLayerMask за типом об'єкта (grabbable, pressable, turnable), виставляється colliderOffset під VR-захват.
Без інструменту налаштування одного інтерактивного об'єкта займала 5–7 хвилин ручної роботи в Inspector. З інструментом—15 секунд. Вісім комнат з 40–60 об'єктами кожна: різниця в тиждень роботи.
| Тип інструменту | Орієнтовні строки розробки |
|---|---|
| Базовий snap-to-surface placer | 2–3 робочих дня |
| Placer з рандомізацією та пресетами | 4–7 робочих днів |
| Повноцінний level-dressing toolkit | 2–4 тижні |
Вартість визначається після аналізу workflow команди та вимог до функціональності інструменту.





