Verify ray clicks, UIKit selections, and DistanceGrabbable interactions with emulated XR controllers. Use for pointing, selecting, pressing spatial UI, or moving an object through a distance grab.
Choose one interaction branch from measured target components. Ray clicks and distance grabs share aiming but not input duration or movement behavior.
requireElementById; use a project test hook only when no addressable runtime
target exists.xr look-at. Do not translate the
controller toward a ray target.For RayInteractable, Pressed, or a UIKit control, use one normal select:
npx @iwsdk/cli xr select --input-json '{"device":"controller-right","duration":0.2}'Use an explicit select-value press/release only when the task needs to inspect the held interval. Query the named application state or control effect after the click; a screenshot alone is not interaction proof.
For DistanceGrabbable, hold trigger button index 0, optionally move the
controller, then release index 0:
{"device":"controller-right","buttons":[{"index":0,"value":1}]}Check movementMode before deciding whether the object should remain remote or
move toward the hand. Query Grabbed or transform state while held and after
release. Do not substitute squeeze index 1; that is the proximity-grab path.
For MoveFromTarget, do not inspect implementation source. Before pressing,
record controller position P and object position S, and compute the grab
distance d = |S - P|. While trigger is held, call xr look-at with the
requested object destination as target and moveToDistance: d; this preserves
the ray distance while moving its endpoint to the destination. Query the object
before release to confirm the move, then release and query again.
For a task with both a click and a distance grab, locate/aim/click/query the first target, then locate/aim/hold-move-release/query the second. Do not rediscover the CLI family, inspect pointer internals, or guess panel offsets from screenshots.
Capture one runtime image only when visual placement is part of the request.
When the request names an artifact path, save it directly with
npx @iwsdk/cli browser screenshot --output-file <path>; do not capture into model
context and then add a copy step.
Stop when the real input and resulting named state are proven, leaving all
buttons released.
0778f51
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.