UIsdkGazeRigComponent to the XR pawn or tracking-space-root actor. The component is exposed in Blueprints as ISDK Gaze Rig Component.GazeExamples sample level or in your own level with compatible ray interactables, grabbables, widgets, or hover-only targets.GazeExamples level that demonstrates gaze interaction behavior.
Note: The settings appear under Plugins > Meta XR - InteractionSDK. The settings class display name is Meta XR - Interaction, so that label may also appear in some editor views.

| Setting | Default | Description |
|---|---|---|
Gaze Enabled | false | Enables project-level gaze support. This value also seeds each rig’s start-in-gaze state and gates the Android eye-tracking permission request |
Allow Gaze By Default | true | Allows objects that use UsePluginSetting to be targeted by gaze |
Gaze Fallback Behavior | DisableGaze | Controls fallback behavior when eye tracking is unavailable |
Gaze Mouse Drag Buttons | LeftOrRight | Controls which mouse buttons can hold the Play-in-Editor gaze ray during drag emulation |
DisableGaze and HmdFallback.PieDragMouseButtons property and uses the EIsdkPieDragMouseButtons enum:| Gaze Mouse Drag Buttons | Description |
|---|---|
LeftOrRight | Either the left or right mouse button holds the emulated gaze ray during a drag. This is the default |
LeftOnly | Only the left mouse button holds the emulated gaze ray during a drag |
RightOnly | Only the right mouse button holds the emulated gaze ray during a drag |
None | No mouse button holds the emulated gaze ray during a drag |

UIsdkGazeRigComponent to the XR pawn or tracking-space-root actor to enable gaze interactions on an interaction rig. The component is exposed in Blueprints as ISDK Gaze Rig Component.| Control | Description |
|---|---|
SetGazeMode() | Enables or disables gaze mode |
GetGazeMode() | Returns the applied gaze mode state |
ToggleGazeMode() | Toggles gaze mode |
GetGazeState() | Returns the current EIsdkGazeState |
GetGazeTargeting() | Returns the rig-owned UIsdkGazeTargetingComponent |
Meta.InteractionSDK.ToggleGazeMode console command, which toggles all gaze rigs in the world.SetGazeMode() applies on the next tick during reconciliation. GetGazeMode() reflects the applied state rather than a pending request.GetGazeState() on the rig is an interface implementation of IIsdkGazeStateProvider, not a Blueprint-callable function. To read gaze state from Blueprints, use UIsdkGazeFunctionLibrary::GetGazeState instead. See Gaze State and Debugging.| Property | Type | Default | Description |
|---|---|---|---|
bStartInGazeMode | bool | false | Whether the rig starts in gaze mode. Seeded from the project Gaze Enabled setting and overridable per instance |
GrabInteractionBehavior | EIsdkGazeGrabInteractionBehavior | AllowNewHovers | Controls far-UI hover behavior while a hand holds a grab. See Grab Behavior While Using Gaze |
GazeTargetingMethod | EIsdkGazeTargetingMethod | ConeCast | Targeting method forwarded to the gaze targeting component |
OnGazeModeChanged delegate that passes the current gaze mode as a single bool parameter.UIsdkGazeTargetingComponent is owned by the gaze rig. Access it through UIsdkGazeRigComponent::GetGazeTargeting() rather than constructing it directly. The component is exposed in Blueprints as ISDK Gaze Targeting Component.
| Getter | Returns |
|---|---|
GetGazeDataSource() | The active eye-gaze data source as a TScriptInterface<IIsdkIEyeGazeDataSource> |
IsUsingEyeTracking() | Whether the active data source is real eye tracking |
GetCurrentGazeTarget() | The current UIsdkRayInteractable under gaze |
GetCurrentGrabbable() | The current UIsdkGrabbableComponent under gaze |
GetCurrentHoverable() | The current UIsdkHoverableComponent under gaze |
GetCurrentGazePose() | The current gaze pose as an FTransform |
GetCurrentHitResult() | Fills an out FHitResult and returns whether a hit is present |
GetLastConeCandidateCount() | The number of cone-cast candidates from the last resolve. Intended for debugging |
The component exposes the following Blueprint-assignable delegates in the **InteractionSDK | Gaze** category: |
| Delegate | Payload |
|---|---|
OnGazeTargetChanged | The new UIsdkRayInteractable target |
OnGazeMove | The current FHitResult for the gaze target |
OnGazeGrabbableChanged | The new UIsdkGrabbableComponent |
OnGazeGrabbableMove | The current FHitResult for the grabbable |
OnGazeHoverableChanged | The new UIsdkHoverableComponent |
OnGazePrimarySourceUnavailable | No payload. Fires once when the primary source cannot produce a valid pose and Gaze Fallback Behavior is DisableGaze |
| Setting | Default | Description |
|---|---|---|
MaxGazeDistance | 500.0f | Maximum targeting distance in centimeters |
GazeCollisionChannel | ECC_Visibility | Collision channel used for gaze targeting |
ConeHalfAngleDegrees | 2.0f | Cone half angle for cone-based targeting |
DwellTimespanSeconds | 0.2f | Dwell duration used to stabilize cone-cast targeting |
TargetingMethod | ConeCast | Targeting method |
EIsdkGazeTargetingMethod supports ConeCast and Line. ConeCast is the default and refines a far-UI candidate to a precise UMG sub-element. Line performs a strict whole-render-rect raycast against UMG widget panels. Non-widget surface interactables use strict raycast behavior in both modes.
BeginPlay and uses different sources depending on runtime context. If eye tracking is unavailable or produces no valid pose within the grace period, gaze falls back to the HMD-fixed source.| Data Source | Description |
|---|---|
UIsdkOpenXREyeGazeDataSource | Provides real eye gaze through the XR_EXT_eye_gaze_interaction OpenXR extension |
UIsdkHmdFixedGazeDataSource | Provides a head-forward synthetic pose as a fallback. Reports eye tracking as unavailable |
UIsdkPieMouseGazeDataSource | Provides desktop mouse-cursor synthetic gaze in Play-in-Editor. Reports eye tracking as unavailable |
DisableGaze, the component fires OnGazePrimarySourceUnavailable. Under HmdFallback, gaze switches to the HMD-fixed source instead of raising this delegate.
horizonos.permission.EYE_TRACKING. The permission request flow runs only when gaze is enabled.EIsdkGazePolicy controls whether an object can be targeted by gaze. The policy is exposed on UIsdkRayInteractable, UIsdkGrabbableComponent, and UIsdkHoverableComponent, and is propagated by UIsdkInteractableWidgetComponent.| Gaze Policy | Description |
|---|---|
UsePluginSetting | Uses the project-level Allow Gaze By Default setting |
Allow | Allows gaze targeting for the object |
Disallow | Disallows gaze targeting for the object |
IsGazeAllowed(). Allow resolves to true, Disallow resolves to false, and UsePluginSetting resolves through the project-level default.
UIsdkHoverableComponent when an object needs hover and unhover behavior without select behavior. The component is exposed as ISDK Hoverable.UIsdkHoverableComponent responds to Hover and Unhover pointer events. It treats Cancel as Unhover, and ignores Select, Unselect, and Move. Concurrent hovers, such as a ray hover and a gaze hover, are supported.
EIsdkGazeState describes the current gaze system state:| State | Description |
|---|---|
DisabledBySettings | Gaze is disabled by project settings or no gaze rig is present |
DisabledByUser | Gaze is disabled by user-controlled gaze mode |
DisabledByFallback | Gaze is disabled by fallback behavior |
EyeTracking | Gaze is using eye tracking |
HmdFallback | Gaze is using head-forward fallback |
UIsdkGazeFunctionLibrary, whose functions are static and take a world context object:| Function | Description |
|---|---|
GetGazeState() | Returns the current gaze state for a valid game-world context object |
SetGazeMode() | Enables or disables gaze mode for the located gaze rig |
ToggleGazeMode() | Toggles gaze mode for the located gaze rig |
IIsdkGazeStateProvider interface. GetGazeState() returns DisabledBySettings when no rig is present.Note: Pass a valid game-worldUObjectas the world context object.
The **Debug | Eye Gaze** settings group controls the on-screen eye-gaze debug visualization. These visuals draw only when the Meta.InteractionSDK.DebugEyeGazeVisuals console variable is enabled. |
| Setting | Default | Description |
|---|---|---|
Ray Length | 500.0 | Length of the drawn debug gaze ray |
Cyclops Color | Red | Color of the drawn debug gaze ray |
Ray Thickness | 1.5 | Thickness of the drawn debug gaze ray |
Hit Radius | 2.0 | Radius of the drawn debug hit marker |
Hit Color | Green | Color of the drawn debug hit marker |
UIsdkPieMouseGazeDataSource deprojects the mouse cursor into a world-space gaze ray. The OS cursor remains visible.
EIsdkGazeGrabInteractionBehavior controls how far UI targeted by gaze behaves while a hand holds a grab.| Behavior | Description |
|---|---|
AllowNewHovers | Allows new gaze hovers while a hand holds a grab. This is the default |
BlockNewHovers | Blocks new gaze hovers while a hand holds a grab |
DropAllHovers | Drops gaze hovers while a hand holds a grab |
UIsdkGazeRigComponent.UIsdkGazeFunctionLibrary::GetGazeState() and no gaze rig is present, the function returns DisabledBySettings.EIsdkGazePolicy. Disallow prevents gaze targeting. UsePluginSetting follows the project-level Allow Gaze By Default setting.UIsdkHoverableComponent, confirm that the actor has a query-enabled collider on the same actor and that the collider blocks the gaze interactor trace channel. Overlap and Ignore collision responses do not produce hits.UIsdkPieMouseGazeDataSource uses the mouse cursor as a synthetic gaze ray and does not report eye tracking as available.