Develop

UI Interaction Using Gaze

Updated: Sep 8, 2026

What Is UI Interaction Using Gaze?

UI interaction using gaze lets you aim at a UMG widget panel by looking at it, then actuate a button, checkbox, or slider by triggering a hand’s select input. The panel itself is the same interactable widget you build for poke and ray interactions. Enabling gaze does not require a second widget component or a second Slate hierarchy.
Gaze is a distance targeting method for a UMG panel that is already set up as an interactable widget. The widget still spawns the same UIsdkRayInteractable that hand rays and controller rays use, and gaze targets that same interactable through the gaze targeting component on the rig. The result is a single widget with one interactable graph that can be driven by poke up close, by ray at mid-range, and by gaze plus a select input at a distance.
Two settings decide whether a widget participates in gaze. A project-level Allow Gaze By Default switch sets the baseline for the whole project. A per-widget GazePolicy on the UIsdkInteractableWidgetComponent can override that baseline in either direction, so a widget can opt in or out of gaze without changing the project default. The gaze targeting component on the rig then decides whether a hit resolves to the whole panel or to a single sub-widget under the gaze.
For the underlying rig setup, the gaze targeting component, and the project-level toggles, see Gaze Interaction.

How Does It Work?

Component chain from the interactable widget through the ray interactable to the gaze targeting and region interactors.
The gaze region interactor receives the UIsdkRayInteractable target broadcast by UIsdkGazeTargetingComponent and applies Select() and Unselect() from a hand’s select input.

Ray Interactable Requirement

Gaze reuses the UIsdkRayInteractable that the widget already exposes for ray interaction. On UIsdkInteractableWidgetComponent, bCreateRayInteractable must be true so that a ray interactable is spawned, and its collider must block the gaze trace channel (default ECC_Visibility). If the widget does not spawn a ray interactable, gaze has nothing to target.
Details panel showing Create Ray Interactable checked and Gaze Policy set to Use Plugin Setting under Ray Interactable.
For the base widget setup, see Interactable Widgets.

Gaze Policy

GazePolicy on UIsdkInteractableWidgetComponent controls whether the ray interactable that the widget spawns is eligible for gaze targeting. The setting is applied to that spawned ray interactable and is relevant only when bCreateRayInteractable is true.
UPROPERTY(Category = "InteractionSDK|Interactable|Ray Interactable",
          EditAnywhere, BlueprintReadWrite, Meta = (ExposeOnSpawn = true))
EIsdkGazePolicy GazePolicy = EIsdkGazePolicy::UsePluginSetting;
EIsdkGazePolicy has three values:
PolicyEditor LabelEffect
UsePluginSetting
Use Plugin Setting
Defers to the project Allow Gaze By Default setting (default true)
Allow
Allow
Always allow gaze for this widget
Disallow
Disallow
Never allow gaze for this widget
Decision flow resolving GazePolicy Allow, UsePluginSetting, and Disallow against the project Allow Gaze By Default setting.
UsePluginSetting is the only value that consults the project default; Allow and Disallow resolve on their own.
The editor hides Allow Gaze By Default until you turn on Gaze Enabled. If you do not see the setting, enable gaze first at:
Project Settings > Plugins > Meta XR - InteractionSDK
Interaction SDK project settings with Gaze Enabled and Allow Gaze By Default both checked in the Gaze group.

Whole Panel vs Sub-Widget Precision

TargetingMethod on UIsdkGazeTargetingComponent (EIsdkGazeTargetingMethod, default ConeCast) governs how gaze resolves a hit to a target.
A widget region is a rectangular target associated with a clickable sub-widget in a UWidgetComponent. During ConeCast, gaze targeting uses these regions to identify the intended sub-widget.
Targeting MethodBehavior for Widgets
ConeCast
Combines a cone around the gaze axis with the widget region system to resolve the hit to a single sub-widget, such as one button on a panel
Line
Treats the whole render rect of the panel as one target. UMG then resolves the sub-widget from the world hit point
ConeCast resolving a gaze hit to one button, and Line treating the whole panel render rect as a single target.
ConeCast resolves a widget region and produces a region-precise pointer hit; Line targets the whole panel and leaves sub-widget resolution to UMG using the world hit point.
Non-widget surface interactables use a strict raycast under both targeting methods. Only widgets combine the gaze cone with the widget region system to pick a sub-widget.
If you are building your own custom targeting system, see Widget Regions for optional implementation details.

Actuation and Coexistence with Hand Rays

While gaze mode is on, hand and controller ray interactors are disabled. A select input from either hand actuates the region interactor owned by the gaze rig. That input is the hand rig’s select action, which for tracked hands is a pinch. The first hand to select owns the interaction until it releases, and the other hand cannot steal it mid-select.
Play-in-Editor view of a hand actuating the sample UMG panel with no hand ray drawn.
When gaze mode is off, the widget reverts to being driven by the normal hand and controller ray interactors, using the same UIsdkRayInteractable and the same widget event pipeline.

Learn more

Now that you know how UMG widget panels become gaze-targetable with Interaction SDK, continue on to the following guides: