About apply-conventions
A conventions skill for working with the PlayCanvas engine. It records coordinate, API, camera, material, and bounds guidance, and stresses checking results in the running app.
Key features
- 01Coordinate and orientation conventions
- 02Current PlayCanvas API usage guidance
- 03Camera control and FOV notes
- 04Material editing and bounds guidance
- 05Runtime verification practices
Use cases
- 01Checking engine conventions before implementation
- 02Choosing current PlayCanvas APIs
- 03Debugging model orientation or lighting
- 04Verifying visual placement in a running app
Install
Copy the command and run it in a terminal.
$
npx skills add https:/ / github.com/ playcanvas/ skills --skill apply-conventionsAfter installing, type/apply-conventionsin Claude Code to confirm it loaded.
Details
From the project READMEEngine conventions
Check version-sensitive APIs against installed playcanvas declarations.
Coordinates
- Right-handed, +Y up, metres.
entity.forward, cameras, andlookAtuse -Z. - Directional and spot lights shine along local -Y, straight down by default. Aim them with
setEulerAngles, notlookAt. - glTF models usually face +Z; record per-model yaw with
calibrate-model. - Angle APIs take degrees in XYZ order. Keep pitch, yaw, and roll as app state; never feed
getEulerAngles()back intosetEulerAngles(). Interpolate withmath.lerpAngleorQuat.slerp. - Use world setters on semantic roots and
setLocal*below a parent. Never scale rigid-body roots or skinned bones.
Current APIs
renderandanimcomponents, notmodelandanimation.- ESM
class X extends Scriptwithstatic scriptName, notcreateScript. Mesh.fromGeometry(device, new BoxGeometry()), notcreateBoxand the othercreate*helpers.- Named imports from
playcanvas; shipped scripts only fromplaycanvas/scripts/esm/**.
Cameras
- FOV is vertical, 45° by default. Check shipped camera scripts before writing controls
(
reuse-scripts).
Materials and bounds
StandardMaterial.useMetalnessdefaults tofalse; enable it before usingmetalness.- Call
material.update()after property edits. Per-mesh values usemeshInstance.setParameter()with no update or clone. - Clone shared materials, including imported ones, before editing them for some meshes.
setParameteruploads raw values; convert sRGB colours withColor#linear().- Back faces cull by default; counter-clockwise winding is the front face.
- Entities have no
aabb; union descendantmeshInstance.aabb. Ifmesh.update()skips bounds, setmesh.aabbyourself, and expand it by any vertex-shader displacement.
Verify in the running app
Offline values cannot prove facing, poses, or placement. Read values from the running app with
inspect-runtime, and judge visuals only from screenshots you have inspected. A saved file path is
not evidence.
Comments
Markdown supported