Scene Object Placement Tool Development
Level designer for VR project places 300 objects manually via standard Unity Transform gizmo. Each object—position, rotation, scale by hand. Takes two days per room. Not an artist problem—a tool absence problem. Custom Editor Tool reduces this to few hours, developed once for entire project.
What goes into custom placement tool
Unity Editor Tools API (available since 2021.2 via EditorTool base class) lets you create tool with fully custom Handles interface in Scene View. For VR scene object placement, typical feature set:
Snap to surface. Object places on any scene surface via Physics.Raycast from cursor—floor, walls, slopes. Without this, every object needs manual Y adjustment to avoid sinking or floating. Implemented via HandleUtility.GUIPointToWorldRay() + Physics.Raycast() in OnToolGUI() with Undo.RecordObject() for Ctrl+Z support.
Randomized placement. Left-click selects random prefab from set, random rotation in specified range, random scale. For organic scenes—bushes, rocks, debris—tool does what took hours manually.
Grid and radial distribution. Select area—tool distributes objects on grid or circle with specified spacing and random jitter. Useful for regular structures: fence, columns, lamps.
Alignment helpers. Align selected objects on X/Y/Z, distribute with equal spacing between extremes. Standard Unity Align Tools doesn't do this properly.
Implementation via EditorWindow and EditorTool
For complex tools with UI—EditorWindow + SceneView.duringSceneGui callback. Window contains prefab list (rendered via GUILayout with preview via AssetPreview.GetAssetPreview()), randomization settings, mode buttons.
Important for VR projects: tool should account for VR placement specifics. Objects visible from all sides in VR—need auto-collision check "doesn't intersect with others" via Physics.OverlapBox() or Physics.OverlapSphere(). Intersection highlighted in red via Handles.DrawWireCube() directly in Scene View—designer sees conflicts immediately.
State serialization via EditorPrefs for simple settings or ScriptableObject for preset persistence between sessions. Team of three can share presets via VCS.
Case study: NPC placement tool in VR escape room
For one project—8-room escape room—needed interactive object placement tool with auto InteractionZone component assignment. Click surface—object places, auto-adds XRGrabInteractable, sets InteractionLayerMask by object type (grabbable, pressable, turnable), adjusts colliderOffset for VR grip.
Without tool, single interactive object setup took 5–7 minutes manual work in Inspector. With tool—15 seconds. Eight rooms with 40–60 objects each: saves a week of work.
| Tool type | Estimated development timeline |
|---|---|
| Basic snap-to-surface placer | 2–3 business days |
| Placer with randomization and presets | 4–7 business days |
| Full level-dressing toolkit | 2–4 weeks |
Cost is determined after analyzing team workflow and tool functionality requirements.





