UIsdkGrabbableComponent as the standard grab flow, with two extra properties to configure. For the underlying concepts, see Gaze Grab Interactions.UIsdkGrabbableComponent (display name ISDK Grabbable Component) to the actor you want the user to gaze-grab. The component is marked BlueprintSpawnableComponent, so it appears in the Add Component menu of any Blueprint actor and can be added at runtime.
EIsdkGrabDetectorType, and its default value is Hand Grab only. Without this change, gaze grab silently fails on this object.
UIsdkSimpleGrabDetector into the ray-grab slot on each grabber when gaze is active. That detector gates every candidate on IsRayGrabAllowed(), so a grabbable that permits only Hand Grab is filtered out before it can ever be selected by gaze.
HandGrab is filtered out.GazePolicy property controls whether this grabbable participates in gaze grab. The default is UsePluginSetting.
| Value | Display Name | Effect |
|---|---|---|
UsePluginSetting | Use Plugin Setting | Defers to the plugin’s Allow Gaze By Default setting |
Allow | Allow | Opts this grabbable in regardless of the plugin default |
Disallow | Disallow | Excludes this grabbable regardless of the plugin default |
ColliderMode property selects which component acts as the grab collider. The default value is FindStaticMesh, which resolves to the actor’s Static Mesh Component. Other supported values are FindByName, Sphere, Box, and CustomMesh, for actors that have multiple meshes or use a custom collider shape.
UIsdkGazeTargetingComponent::GazeCollisionChannel, which defaults to ECC_Visibility (Visibility). If the collider is set to Overlap or Ignore on that channel, the gaze trace produces no hit and the object never becomes hoverable.
UIsdkFunctionLibrary::FindGrabbableByComponent(Hit.GetComponent()) against the hit component itself, not the hit actor. A widget surface or decorative mesh in front of the grab collider intercepts the hover before it reaches the grabbable.OnGazeGrabbableChanged on the gaze targeting component to log every hover transition, including the transition back to nullptr when the gaze leaves a grabbable.// In your actor header
UFUNCTION()
void HandleGazeGrabbableChanged(UIsdkGrabbableComponent* NewGrabbable);
// In BeginPlay
if (UIsdkGazeRigComponent* GazeRig = FindComponentByClass<UIsdkGazeRigComponent>())
{
if (UIsdkGazeTargetingComponent* Targeting = GazeRig->GetGazeTargeting())
{
Targeting->OnGazeGrabbableChanged.AddDynamic(
this, &AMyActor::HandleGazeGrabbableChanged);
}
}
nullptr when the ray moves off a previously hovered grabbable. If you never see a fire while looking directly at the object, the trace is not producing a mappable hit; if you see the object enter and then immediately leave on every glance, the hit is landing on a non-grabbable component in front of it. Enter Play in Editor, look at the object, and pinch. If nothing happens, use the table below to narrow the cause.
| Symptom | Cause |
|---|---|
No gaze hover on the object | The grab collider does not Block the Visibility channel, another collider or widget is intercepting the hit, or the gaze rig is missing from the pawn |
Gaze hovers the object but pinch does nothing | Allowed Grab Detector Types is missing Ray Grab, the grabbable and grabber disagree on input method (Pinch vs Palm), or the object is already held |