Develop
Develop
Select your platform

Distance Grab Interactions

Updated: Nov 3, 2025

Design Guidelines: Providing a comfortable hand tracking experience is essential for creating immersive and enjoyable apps. Refer to the Hand Tracking Design Guide at the bottom of this page to learn about best practices and to minimize risks of user discomfort.

The distance grab interaction lets you use your controllers to grab and move objects that are out of arm’s reach. Typically, this means attracting the object toward the controller and then grabbing like you do in a grab interaction.

DistanceGrabInteractor

The DistanceGrabInteractor is the Interactor class for the distance grab interaction. It uses configurable IMovements to move grabbed objects, and it uses a DistantCandidateComputer in order to hover the best candidate.
DistanceGrabInteractor uses different conical frustums to select the best distant interactables in a solid manner:
  • SelectionFrustum: Objects inside this frustum are checked immediately, and the most centered one will become the new selected interactable.
  • Optional Deselection Frustum: When set, the Selected interactable must exit this frustum rather than the SelectionFrustum, in order to be deselected. It should be wider than the SelectionFrustum. It also allows interactables to become stickier when no better interactables are within the Selection range.
  • Optional Aid Frustum: When provided, interactables must be within both the SelectionFrustum and this frustum in order to be eligible for selection. Typically, this frustum originates from the head.
    • Aid Blending: This indicates how centered an interactable must be within the Selection or Aid frustums to be selected. Values range from 0 to 1. A value of 0 indicates that the interactable must be within both frustums but it will be scored as centered within the SelectionFrustum. A value of 1 indicates that it is scored better if it is more centered within the Aid Frustum (Gaze selection).
  • Detection Delay: This value (in seconds) indicates how long the interactable must remain the best candidate before it becomes selected. Increasing this value helps reduce the chance of a false positive in noisy environments.
As demonstrated in the DistanceGrabExamples scene, the recommended approach for configuring the frustums is to set the Selection and Deselection frustums to a point relative to the wrist (instead of the Pointer Pose). Use FilteredTransform for the frustum origins to keep the frustums stable while allowing the wrist to turn in order to select nearby interactables.

DistanceGrabInteractable

The DistanceGrabInteractable is the Interactable class for the distance grab interaction. The Movement Provider field provides the versatility, which indicates how the interactable moves when selected If no value is provided, the interactable moves toward the interactor, and then attaches to the interactor and move in sync with it. To use other behaviors or create additional behaviors, implement the IMovementProvider class. The Movements folder includes a list of behaviors, but some of the most relevant ones include the following:
Movement TypeMovment ProviderDescription
Pull Interactable to Hand
MoveTowardsTarget
Causes the grabbed object to move from its current location to the hand or controller grabbing it using the specified velocity (Travel Speed) and easing curve (Travel Curve).
Auto Pull Interactable to Hand
AutoMoveTowardsTarget
This behavior is similar to MoveTowardsTarget but this behavior will finish the movement toward the interactor even if the selection is interrupted. This behavior is useful for quickly attracting multiple objects toward the user.
Grab Relative to Hand
MoveFromTarget
Keeps the grabbed object relative to the hand or controller using the offset when the grab is initiated. The grabbed object can be manipulated, but retains the initial offset.
Manipulate in Place
MoveAtSource
Anchors the interactable at its current position when the grab is initiated. The grabbed object can be manipulated as if the hand jumped automatically to the interactable position and moved it from there.

Ray Visual

In close relation with the reticles, DistantInteractionLineVisual is used to draw a dotted line that connects the interactor with the currently hovered interactable. It is possible to modify the material and thickness of the line and it uses the PolylineRenderer class for the visuals.
Ray Visual Action
Ray Visual Action
Ray Visual Action

Learn more

Design guidelines

Hands

Core interactions

Did you find this page helpful?