Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Set up XR Interaction Toolkit (XRI) for VR/AR — XR rigs and grab/socket/ray interactors. Use when building VR/AR interaction, setting up an XR rig, or configuring grab/socket/ray interactors, even if the user just says "VR" or "XR交互". 搭建用于 VR/AR 的 XR Interaction Toolkit(XRI:XR rig、抓取/插槽/射线交互器);当用户要构建 VR/AR 交互、搭建 XR rig、或配置抓取/插槽/射线交互器时使用。
| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-10 | ✗→✓ | ▲ Improved | 87% | 0% |
| case-01 | ✗→✓ | ▲ Improved | 31% | 0% |
| case-02 | ✗→✓ | ▲ Improved | 82% | 0% |
| case-03 | ✗→✓ | ▲ Improved | 255% | 0% |
| case-11 | ✗→✓ | ▲ Improved | 101% | 0% |
Use this module for XR Interaction Toolkit setup and configuration. All xr_* skills are reflection-based and support XRI 2.x on Unity 2022 and XRI 3.x on Unity 6+.
> Requires: com.unity.xr.interaction.toolkit. > Hard rule: Read this file before the first xr_* call in a session. Wrong property names can fail silently because the bridge is reflection-based.
Operating Mode (v1.9 three-tier):
xr_check_setup, xr_get_scene_report, xr_list_interactors, xr_list_interactables) run directly. Create/modify skills are FullAuto — on MODE_RESTRICTED, run the grant protocol; a successful /permission/grant executes the skill server-side and returns the result in the same response.RiskLevel="high" skills, so nothing is auto-classified as forbidden — every skill is reachable via grant.com.unity.xr.interaction.toolkit is missing, every xr_* skill returns the NoXRI() install instruction instead of executing.xr_configure_interactable / xr_configure_haptics / xr_configure_interaction_layers is silently ignored. Load API_REFERENCE.md before issuing detailed property edits.DO NOT (common hallucinations):
XRHand, XRPlayer, XRTeleporter, GrabInteractor, VRController, XRLocomotion, and XRManager are not the runtime classes you want hereinteractable.OnGrab() / OnRelease() are not the XRI event model -> use selectEntered / selectExitedcontroller.vibrate() is not the documented route here -> configure haptics through xr_configure_hapticsInteractionLayerMaskAPI_REFERENCE.md before setting detailed XR component propertiesCorrect class names to anchor on:
XRInteractionManagerXROriginXRRayInteractorXRDirectInteractorXRSocketInteractorXRGrabInteractableXRSimpleInteractableTeleportationProviderTeleportationAreaTeleportationAnchorContinuousMoveProviderSnapTurnProviderContinuousTurnProviderTrackedDeviceGraphicRaycasterXRUIInputModuleTrackedPoseDriverRouting:
uiarchitecture, patterns, async, or scriptdesignAPI_REFERENCE.md| Skill | Use | Key parameters | |-------|-----|----------------| | xr_check_setup | Validate XR package, rig, managers, and scene prerequisites | verbose? | | xr_setup_rig | Create XR Origin + camera + controllers | name, cameraYOffset? | | xr_setup_interaction_manager | Add or find manager | none | | xr_setup_event_system | Replace/add XR UI input stack | none | | xr_get_scene_report | Report scene-side XR status | none |
| Skill | Use | Key parameters | |-------|-----|----------------| | xr_add_ray_interactor | Remote pointing / ray interaction | name, maxDistance?, lineType? | | xr_add_direct_interactor | Close-range hand grab | name, radius? | | xr_add_socket_interactor | Snap-to slot | name, showHoverMesh?, recycleDelay? | | xr_add_grab_interactable | Rigidbody + collider + grab config | name, movementType?, throwOnDetach? | | xr_add_simple_interactable | Hover/select without grab | name | | xr_configure_interactable | Fine-tune interactable behavior | target + changed fields only | | xr_list_interactors | List all scene interactors | none | | xr_list_interactables | List all scene interactables | none |
| Skill | Use | Key parameters | |-------|-----|----------------| | xr_setup_teleportation | Add teleport provider to XR Origin | none | | xr_add_teleport_area | Mark a surface as teleportable | name, matchOrientation? | | xr_add_teleport_anchor | Create fixed teleport destination | name, x/y/z, rotY?, matchOrientation? | | xr_setup_continuous_move | Add stick locomotion | moveSpeed?, enableStrafe?, enableFly? | | xr_setup_turn_provider | Add snap or smooth turn | turnType, turnAmount?, turnSpeed? | | xr_setup_ui_canvas | Convert Canvas for XR interaction | name |
| Skill | Use | Key parameters | |-------|-----|----------------| | xr_configure_haptics | Set hover/select vibration | name, intensities, durations | | xr_add_interaction_event | Wire interaction callback to target method | name, eventType, targetName, targetMethod | | xr_configure_interaction_layers | Set InteractionLayerMask | name, layers, isInteractor |
pythonimport unity_skills as u u.call_skill("xr_check_setup") u.call_skill("xr_setup_rig", name="XR Origin") u.call_skill("xr_add_ray_interactor", name="Right Controller") u.call_skill("xr_add_direct_interactor", name="Left Controller") u.call_skill("xr_setup_teleportation") u.call_skill("xr_setup_turn_provider", turnType="Snap", turnAmount=45) u.call_skill("xr_add_grab_interactable", name="MyCube", movementType="VelocityTracking")
xr_check_setup.xr_setup_rig.xr_setup_event_system.xr_add_direct_interactor + xr_add_grab_interactablexr_add_ray_interactor + xr_add_grab_interactablexr_add_socket_interactor + grabbable objectmovementType defaults matter:
VelocityTracking: best general-purpose physical grabKinematic: use for handles/tools that should not get stuckInstantaneous: best for precise remote grabxr_setup_teleportation + xr_add_ray_interactor + xr_add_teleport_area/xr_add_teleport_anchorxr_setup_continuous_movexr_setup_turn_providerComfort default: snap turn + moderate move speed (~2.0 m/s).
xr_setup_ui_canvasxr_setup_event_systemThis is the most important XR anti-hallucination table in the repo.
| Component | Collider required | isTrigger | Recommended collider | Reason | |----------|-------------------|-------------|----------------------|--------| | XRDirectInteractor | Yes | True | SphereCollider (0.1-0.25) | Overlap detection | | XRRayInteractor | No | - | None | Uses raycasts | | XRSocketInteractor | Yes | True | SphereCollider (0.1-0.3) | Snap zone | | XRGrabInteractable | Yes | False | BoxCollider or convex MeshCollider | Physics + ray target | | XRSimpleInteractable | Yes | False | BoxCollider | Selection detection | | TeleportationArea | Yes | False | MeshCollider or BoxCollider | Surface raycast target | | TeleportationAnchor | Yes | False | Thin BoxCollider | Point raycast target |
Critical rules:
XRGrabInteractable needs a Rigidbody.| Topic | XRI 2.x | XRI 3.x | |------|---------|---------| | Main namespace style | root namespace | split sub-namespaces | | Rig type | XROrigin | XROrigin | | Locomotion core | LocomotionSystem | LocomotionMediator | | Controller type | ActionBasedController | ActionBasedController | | Bridge behavior | Reflection helper falls back automatically | Reflection helper prefers 3.x first |
XRInteractionManager.XROrigin already exists.InteractionLayerMask for interactor/interactable filtering.Update() polling when possible.pythonimport unity_skills as u u.call_skill("xr_setup_rig", name="XR Origin", cameraYOffset=1.36) u.call_skill("xr_setup_event_system") u.call_skill("xr_add_ray_interactor", name="Right Controller", maxDistance=30, lineType="StraightLine") u.call_skill("xr_add_grab_interactable", name="Tool", movementType="VelocityTracking", throwOnDetach=True) u.call_skill("xr_configure_haptics", name="Right Controller", selectIntensity=0.7, selectDuration=0.15)
Exact names, parameters, defaults, and returns are defined by GET /skills/schema or unity_skills.get_skill_schema(), not by this file. Before configuring XR component properties in detail, load API_REFERENCE.md. XR property names are reflection-sensitive.
Other measured skills in the registry, with their headline benchmark lift.