Debug continuous behavior in WebXR scenes — physics, animations, collisions, game loops, or any real-time interaction that happens too fast for an agent to observe. Uses ECS pause/step/snapshot/diff to freeze time and inspect state frame by frame.
复制安装指令,让 AI 自动完成配置 · 推荐新手
请帮我安装 askskill 上的 "iwsdk-debug" 技能: 1. 下载 https://raw.githubusercontent.com/facebook/immersive-web-sdk/main/packages/starter-assets/claude-injections/skills/iwsdk-debug/SKILL.md 2. 保存为 ~/.claude/skills/iwsdk-debug/SKILL.md 3. 装好后重载技能,告诉我可以用了
Real-time behavior (physics, animations, collisions, game loops) happens too fast for an agent to observe directly. By the time you take a screenshot, the action is over. This skill uses ECS time-control tools to freeze, step, and diff state frame by frame.
User request is in $ARGUMENTS.
Every debugging session follows this pattern:
ecs_pause — freeze ECS updates right before the interesting momentecs_snapshot({ "label": "before" }) — capture state before the actionecs_step(count, delta) — advance a few frames at fixed timestepbrowser_screenshot — visually verify what happenedecs_snapshot({ "label": "after" }) — capture state after steppingecs_diff({ "from": "before", "to": "after" }) — see exactly what changedecs_resume — return to normal execution when doneThe key insight: pause BEFORE triggering the action, not after. If you pause after, you've already missed the first frames.
| Tool | Purpose |
|---|---|
ecs_pause | Freeze all ECS system updates. Render loop continues — screenshots still work. |
ecs_step({"count":N,"delta":SECONDS}) | Advance N frames with fixed timestep (seconds). Must pause first. |
ecs_resume | Resume normal execution. First frame uses capped delta to avoid physics explosions. |
ecs_snapshot({"label":"..."}) | Capture full ECS state. Stores up to 2 snapshots. |
ecs_diff({"from":"...","to":"..."}) | Compare two snapshots. Shows added/removed entities and field-level value changes. |
ecs_toggle_system({"name":"...","paused":true}) | Pause/resume a single system. Use ecs_list_systems to discover names. |
browser_screenshot | Visual verification — works while paused since the render loop continues. |
delta is in seconds. Common values: 0.016 (60fps), 0.0139 (72fps/Quest refresh rate).Short domain-specific tips. Apply the core workflow above, plus these hints.
delta: 0.016 to catch initial acceleration.PhysicsBody._linearVelocity and PhysicsBody._angularVelocity to see motion direction and speed.Transform.position to track movement.PhysicsBody (Static) and PhysicsShape (TriMesh for complex geometry).ecs_query_entity to inspect PhysicsShape and PhysicsBody on both the falling object and the surface.PhysicsBody._linearVelocity shows the throw direction and speed.PhysicsBody with state: Dynamic.delta matching your target framerate.…
Test grab system (distance grab, one-hand grab, two-hand grab) against the grab example using the iwsdk CLI.
Test XR interactions (ray, poke/touch, dual-mode, audio, UI panel) against the poke example using the iwsdk CLI.
Find and click a target object in XR. Use when testing UI interactions, clicking buttons, or verifying interactable elements work correctly.
IWSDK project planning and best practices guide. Use when planning new IWSDK features, designing systems/components, reviewing IWSDK code architecture, or when the user asks about IWSDK patterns, ECS design, signals, or reactive programming in this codebase.
Develop and iterate on IWSDK UI panels efficiently. Use when working on PanelUI components, debugging UI layout, or improving UI design in IWSDK applications.
Test level system (LevelRoot, LevelTag, default lighting, scene hierarchy) against the poke example using the iwsdk CLI.