About assemble-scene
assemble-scene is a development skill for structuring and placing objects in PlayCanvas scenes. It covers root and visual hierarchies, collider sizing, spacing, lifecycle cleanup, and rendered-frame placement checks.
Key features
- 01Organize each object around a named root
- 02Align colliders with measured render bounds
- 03Space objects using calibrated footprints
- 04Keep UI and scene elements outside model hierarchies
- 05Check supports and attachments after rendering
- 06Remove roots and unregister owned events
Use cases
- 01Assemble a scene with repeated object instances
- 02Set collider sizes and object spacing
- 03Check whether objects float or penetrate surfaces
Install
Copy the command and run it in a terminal.
npx skills add https:/ / github.com/ playcanvas/ skills --skill assemble-sceneAfter installing, type/assemble-scenein Claude Code to confirm it loaded.
Bundled files
References and scripts installed along with SKILL.md.
references/direct-engine.mdreact.mdweb-components.mdDetails
From the project READMEScene assembly
Each scene object has one named root. Put position, heading, rigidbody, collision, and
scripts on the root, and the calibrated visual from calibrate-model below it. Apply calibration
once; if the tuning record is missing, calibrate first.
- Name roots by role, with predictable names for repeated instances.
- Size colliders from measured bounds and keep them aligned with render bounds.
- Space roots by the scaled footprint in the tuning record, not by pivot position. A non-90° yaw rotates the footprint, so reserve its larger horizontal extent.
- Keep UI, effects, cameras, and lights outside model hierarchies.
- Remove the root through its surface's lifecycle and unregister events it owns.
- Rigid bodies need Ammo loaded first (
build-app).
Check placement
After a rendered frame, measure each support or attachment at the object's actual position, using
a mount point, raycast, or geometry sample read through inspect-runtime. A positive gap floats; a negative gap penetrates.
Overlapping world AABBs between unrelated roots are a failure unless two different views prove the
overlap is empty space.
Read only the reference matching the code: direct Engine, React, or Web Components.