Develop

Movement Providers

Updated: Sep 8, 2026
Interaction SDK movement providers are optional components that change how an interactable moves when you select it.

Add a movement provider

You add a provider component to the interactable, then assign it to the interactable’s Movement Provider field. To try movement providers in a pre-built scene, see the DistanceGrabExamples scene.

Movement provider summary

The following table lists all movement providers. The Status column marks which providers are experimental. Each experimental provider carries an experimental feature notice in its section below. Read that notice before you ship with the provider.
ProviderDescriptionStatus
Moves the selected interactable 1:1 with the interactor.
Stable
Animates the selected interactable to the interactor over time, at a rate set by its Travelling Data property.
Stable
Gradually pulls the selected interactable towards the interactor, and completes the movement if it is interrupted.
Stable
Moves the selected interactable around a fixed point at its current position.
Stable
Constantly moves the interactable at a fixed rate towards the interactor.
Stable
Moves the selected interactable along the grab axis, towards you as you draw your hand back and away as you push it forward.
Stable
Maps movement relative to an estimated position of the user’s heart and core.
Experimental
Uses joystick input to control the movement and rotation of an interactable. This is useful for examining an object up close and from different angles.
Stable
Links movement deltas from the interactor to the interactable. The interactable matches those transformations in its own local space.
Experimental
Moves the selected interactable anchored to the interactor at the hit point. The Unity Inspector offers to add this provider for ray interactables set up for grab.
Stable
Rotates the interactable along the movement delta of the interactor, without changing its position.
Experimental

Provider details

MoveFromTargetProvider

MoveFromTargetProvider moves the selected interactable 1:1 with the interactor.
An interactable tracking the interactor one-to-one as the interactor moves
Note: This provider has no properties to configure.

MoveTowardsTargetProvider

MoveTowardsTargetProvider animates the selected interactable to the interactor over time, at a rate set by its Travelling Data property.
An interactable animating across the gap to the interactor after selection
PropertyDefaultDescription
Travelling Data
PoseTravelData.FAST
The PoseTravelData settings that control how the interactable travels to the interactor.
PoseTravelData is a struct with three fields: a travel speed, a fixed travel time flag, and a travel curve.
FieldDescription
Travel speed
When attracting the object, indicates the rate it will take for the object to realign with the hand after a grab.
Use fixed travel time
Changes the units of the travel speed. Disabled means m/s, while enabled is fixed seconds.
Travel curve
An AnimationCurve. Both PoseTravelData.DEFAULT and PoseTravelData.FAST use an ease-in-out curve.
The two presets differ in how the duration of the travel relates to the distance travelled. PoseTravelData.FAST sets a travel speed of 0.1 with fixed travel time enabled. The travel always takes 0.1 seconds, no matter how far the interactable has to move. PoseTravelData.DEFAULT sets a travel speed of 1 with fixed travel time disabled. The interactable moves at 1 meter per second, so the duration scales with the distance.

AutoMoveTowardsTargetProvider

AutoMoveTowardsTargetProvider gradually pulls the selected interactable towards the interactor, and completes the movement if it is interrupted.
An interactable pulled gradually toward the interactor, then completing the travel on its own after the pull stops
PropertyDefaultDescription
Travelling Data
PoseTravelData.DEFAULT
The PoseTravelData settings that control how the interactable travels to the interactor. PoseTravelData.DEFAULT moves the interactable at 1 meter per second, so the duration scales with the distance. For the fields of PoseTravelData, see MoveTowardsTargetProvider.
Pointable Element
None
A pointable element. This property is required. The provider asserts at startup if it is not assigned.

MoveAtSourceProvider

MoveAtSourceProvider moves the selected interactable around a fixed point at its current position.
An interactable pivoting around a fixed point at its original position instead of translating
Note: This provider has no properties to configure.

FollowTargetProvider

FollowTargetProvider constantly moves the interactable at a fixed rate towards the interactor.
An interactable continuously trailing the interactor at a fixed rate
PropertyDefaultDescription
Speed
5
The rate at which the interactable moves towards the interactor. Speed also sets the rate at which the interactable turns to match the interactor’s rotation. That rate is 50 degrees per second for each unit of Speed.

ObjectPullProvider

ObjectPullProvider pulls the selected interactable towards the interactor.
An interactable drawn toward the interactor after selection
The direction you move your hand sets the direction the interactable travels. The provider measures how far the interactor has moved from the position it held at selection, along the original grab axis. Draw your hand back, towards yourself, and the interactable comes towards you. Push your hand forward, towards the interactable, and the interactable moves away. The interactable keeps travelling while your hand stays off the start position, and it travels faster the further your hand is from that position.
PropertyDefaultDescription
Speed
1
The rate at which the interactable moves along the grab axis.
Dead Zone
0.02
The minimum distance, in meters, that the interactor must move along the original grab axis before the interactable moves. Movement in either direction along that axis counts. Smaller movements produce no motion.

CoronaryMovementProvider

Experimental
This feature is considered experimental. Use caution when implementing it in your projects as it could have performance implications resulting in artifacts or other issues that may affect your project.
CoronaryMovementProvider moves a selected interactable in a body-centered frame of reference rather than a hand-centered one. It estimates the position of the user’s heart and treats that point as a body-anchored pivot. The interactable sits at the far end of a rigid lever anchored at that pivot. The provider was designed for one specific grab integration, and it also works with ray interactions.
That integration is gaze-driven grab.
Each frame, the provider derives the pivot from the headset pose. It offsets the headset position backward by Occipital Offset meters, opposite the direction the head faces. That reaches a point at the back of the skull. The point stays close to stationary as the head rotates, which makes it a stable intermediate reference. The provider then drops Coronary Offset meters straight down from it to reach the pivot. The estimate assumes the user is upright. The provider recomputes the pivot every frame, so the pivot travels with the user instead of staying fixed in world space.
When the user selects the interactable, the provider records the vector from the pivot to the interactable. It tracks a second vector from the pivot to the hand. The hand vector is the input and the interactable vector is the output. The two act as the arms of a single lever rooted at the pivot. Horizontal hand movement swings the interactable about the vertical axis. Vertical hand movement pitches the interactable. The pitch is computed in the plane of the lever, so raising or lowering the hand does not roll the interactable. Moving the hand along the lever axis changes the interactable’s distance from the pivot.
The provider applies the hand’s angular displacement about the pivot directly to the interactable, so both swing through the same angle. The interactable sits farther from the pivot than the hand does, as it will for a distant object. The shared angle then carries the interactable through a much longer arc than the hand travels.
The interactable’s distance from the pivot depends on how far the hand has moved along the lever axis. The provider takes the ratio of the hand’s current distance from the pivot to its distance at the moment of selection. It then raises that ratio to the power of Depth Remapping Factor. That property is an exponent, not a multiplier. A value above 1 exaggerates pushing and pulling. A value below 1 damps them. A value of 1 keeps the mapping linear.
The provider handles rotation separately from position. With Billboard To Face User off, the interactable rotates with the hand. It applies the hand’s rotation since selection to the interactable’s original orientation. With the property on, the interactable turns to face the pivot, then applies Billboard Pitch Offset degrees of pitch to the result.
PropertyDefaultDescription
Hmd
None
A component that implements IHmd and supplies the head pose. You can leave this empty. The provider then finds a headset component in the scene at runtime.
Occipital Offset
0.1
The offset (in meters) behind the headset position at which to estimate the point at the back of the skull.
Coronary Offset
0.4
The offset (in meters) below the point at the back of the skull at which to estimate the pivot at the user’s heart.
Depth Remapping Factor
1.3
The exponent applied to the depth ratio when the interactable moves toward or away from the pivot. Values above 1 exaggerate that motion. Values below 1 damp it.
Billboard To Face User
false
Toggles whether the interactable turns to face the pivot when enabled, or rotates with the hand when disabled.
Billboard Pitch Offset
20
Offsets the pitch of the rotation that is applied when the interactable turns to face the pivot.

JoystickPoseMovementProvider

JoystickPoseMovementProvider uses joystick input to control the movement and rotation of an interactable. This is useful for examining an object up close and from different angles.
The joystick moves the held interactable nearer or farther along the grab direction and rotates it about the vertical axis. Min Distance and Max Distance bound how far the interactable can travel along that direction. The properties below refer to that direction as the Z-axis.
PropertyDefaultDescription
Interactable
None
A component that implements IInteractableView.
Move Speed
0.04
The speed at which movement occurs.
Rotation Speed
1.0
The speed at which rotation occurs.
Min Distance
0.1
The minimum distance along the Z-axis for the grabbed object. Range: 0 to 10.
Max Distance
3.0
The maximum distance along the Z-axis for the grabbed object. Range: 1 to 10.

MatchTargetAtSourceProvider

Experimental
This feature is considered experimental. Use caution when implementing it in your projects as it could have performance implications resulting in artifacts or other issues that may affect your project.
MatchTargetAtSourceProvider links movement deltas from the interactor to the interactable. The interactable matches those transformations in its own local space. It therefore rotates about its own origin instead of orbiting the hand.
Note: This provider has no properties to configure.

MoveFromTargetAtAnchorProvider

MoveFromTargetAtAnchorProvider moves the selected interactable anchored to the interactor at the hit point. The anchor holds the interactable where the ray first met it. The contact point stays under the pointer for as long as the selection lasts.
Interaction SDK does not add this provider on its own. When a ray interactable is set up for grab without a movement provider, the Unity Inspector shows a warning with a Fix button. That button adds this provider and assigns it to the Movement Provider field.
The anchor behaves the same way for a gaze interactable, holding the interactable where the gaze first met it. The Inspector offers the same Fix button when a gaze interactable is set up for grab without a movement provider. A gaze interactable with more than one warning shows Fix All instead.
Note: This provider has no properties to configure.

PanToRotateProvider

Experimental
This feature is considered experimental. Use caution when implementing it in your projects as it could have performance implications resulting in artifacts or other issues that may affect your project.
PanToRotateProvider rotates the interactable along the movement delta of the interactor. This provider affects rotation only, and the position of the interactable does not change.
PropertyDefaultDescription
Sensitivity
1
The amount of rotation relative to hand movement. A value of 1 produces a full 360-degree rotation of the interactable per unit of hand movement.

Learn more

Design guidelines

Hands

Core interactions

  • Input mappings: Learn about how input mappings bridge modalities and interaction types.
  • Input hierarchy: Learn about the different input hierarchies.
  • Multimodality: Learn about multimodality.
  • Ray casting: Learn about indirect interaction through ray casting.
  • Touch: Learn about direct interaction through touch.
  • Grab: Learn about grab interactions for object manipulation.
  • Microgestures: Learn about microgesture interactions.