| Practice | Description |
|---|---|
Ergonomic neutrality | Prioritize indirect interactions for long-duration tasks to keep users in a neutral body position, which is more comfortable than extended direct interaction. |
Targeting hierarchy | Use eyes for targeting on devices that support eye tracking, and fall back to hands or controllers on devices that do not. |
Hand raycast aim | Ray casting with hands is sensitive to small movements. The pinch gesture itself causes a slight hand shift, which often pulls the ray cursor off small targets. This is a common failure mode for close buttons (the "X"), small toggles, and tightly packed controls. For the best result, use Interaction SDK's Ray Interactor, which is optimized for ray interactions and mitigates pinch-caused jitter. If you are not using ISDK, you can access the runtime raycast pose through OpenXR via the XR_FB_hand_tracking_aim extension's aimPose property. |
Comfortable distance | Indirect interaction is most comfortable from roughly 0.8m to 3m. Inside that range, users can target panels without straining their arm or struggling to read content. |
Multimodal feedback | Deliver multiple forms of feedback. Use Interaction SDK for best practice designs for visual ray lines, cursors, and effects. Use sound and haptics on controllers to confirm interaction states and improve user confidence. |
Targeting disambiguation | Utilize the Interaction SDK's (ISDK) "first/best hover" logic to prioritize intent in scenes containing multiple, closely-packed interactables. |
Gesture consistency | Always use the standard pinch gesture for hand-based selections and the trigger for controller-based selection to maintain system-wide familiarity. |
Targeting assistance | Implement magnetism and snapping when relevant to make targeting feel more satisfying and less reliant on pixel-perfect aim. |
XR_FB_hand_tracking_aim extension's aimPose.