Why Meta Quest?
Design
Develop
API reference
Distribute
Blog
Support
Login
Build with Meta
Social Technologies
Meta Horizon
AI
Horizon Worlds
About us
Careers
Research
Products
Virtual reality / Meta Horizon
Developer Blog
Download SDKs
Meta for Work
Programs
Start
Meta Horizon Creator Program
Discover
Why Meta Quest?
What is mixed reality?
Platforms and tools
2D apps for Meta Horizon OS
Devices
Meta Avatars
Success stories
Use cases
Support and legal
Developer policies
Legal
Privacy
Forums
Support
Build with Meta
Social Technologies
Meta Horizon
AI
Horizon Worlds
About us
Careers
Research
Products
Virtual reality / Meta Horizon
Developer Blog
Download SDKs
Meta for Work
Programs
Start
Meta Horizon Creator Program
Discover
Why Meta Quest?
What is mixed reality?
Platforms and tools
2D apps for Meta Horizon OS
Devices
Meta Avatars
Success stories
Use cases
Support and legal
Developer policies
Legal
Privacy
Forums
Support
Build with Meta
Social Technologies
Meta Horizon
AI
Horizon Worlds
About us
Careers
Research
Products
Virtual reality / Meta Horizon
Developer Blog
Download SDKs
Meta for Work
Programs
Start
Meta Horizon Creator Program
Discover
Why Meta Quest?
What is mixed reality?
Platforms and tools
2D apps for Meta Horizon OS
Devices
Meta Avatars
Success stories
Use cases
Support and legal
Developer policies
Legal
Privacy
Forums
Support
English (US)
© 2025 Meta
API reference
API reference
Select your platform
No SDKs available
No versions available
Overview
CanvasGroupAlphaToggle
CanvasSizeConstraint
ColliderSizeConstraint
GridSpacingScaler
InteractableObjectLabel
MoveRelativeToTarget
MoveRelativeToTargetProvider
Oculus
Interaction
Interaction
ActiveStateGroup
ActiveStateNot
ActiveStateSelector
ActiveStateUnityEventWrapper
ArcTubeVisual
AudioPhysics
AudioPhysics
CollisionEvents
AudioPhysics
CollisionEvents
AudioTrigger
BestHoverInteractorGroup
BestSelectInteractorGroup
Body
Input
Input
Body
FromOVRBodyDataSource
IBody
ISkeletonMapping
OVRSkeletonMapping
PoseDetection
PoseDetection
IBodyPose
OVRBodyPoseSkeletonProvider
Samples
Samples
BodyPoseSwitcher
LockedBodyPose
PoseCaptureCountdown
CandidateComparer
ClassToClassDecorator
ClassToValueDecorator
Collections
Collections
IEnumerableHashSet
Context
Context
Instance
ControllerPointerPose
ControllerRayVisual
ControllerSelector
DPadUnityEventWrapper
DebugTree
DebugTree
INodeUI
ITreeNode
DecoratorBase
Demo
Demo
BasicPBRGlobals
MeshBlit
WaterSpray
WaterSprayNozzleTransformer
DisableRaycaster
DistanceGrabInteractable
DistanceGrabInteractor
DistanceReticles
DistanceReticles
IReticleData
Editor
Editor
VerifyScenePackageDependencies
VerifyScenePackageDependencies
PreprocessBuild
FinalAction
FirstHoverInteractorGroup
Grab
Grab
GrabSurfaces
GrabSurfaces
IGrabSurface
GrabAPI
GrabAPI
FingerPalmGrabAPI
FingerPinchGrabAPI
GrabbingRule
HandGrabAPI
PalmGrabAPI
PinchGrabAPI
GrabFreePhysicsTransformer
GrabFreeTransformer
GrabInteractable
GrabInteractor
Grabbable
HandDebugGizmos
HandGrab
HandGrab
DistanceHandGrabInteractable
DistanceHandGrabInteractor
HandGrabInteractable
HandGrabInteraction
HandGrabInteractor
HandGrabPose
HandGrabUseInteractable
HandGrabUseInteractor
HandPose
IHandGrabInteractable
IHandGrabInteractor
IHandGrabState
IHandGrabUseDelegate
Recorder
Recorder
Editor
HandGrabPoseLiveRecorder
RigidbodyDetector
TimerUIControl
HandJoint
HandPinchOffset
HandPointerPose
HandRootOffset
HandTrackingConfidenceProvider
HandTranslationUtils
HandVisual
HoverInteractorsGate
IActiveState
ICandidateComparer
ICandidatePosition
ICollidersRef
ICurvedPlane
IDeltaTimeConsumer
IDistanceInteractor
IEvent
IFingerAPI
IFingerUseAPI
IGameObjectFilter
IGrabbable
IHandSphereMap
IHandVisual
IInteractable
IInteractableView
IInteractor
IInteractorView
IMovement
IMovementProvider
IPointable
IPointableCanvas
IPointableElement
IPolyline
IRelativeToRef
IRigidbodyRef
ISelector
ISnapPoseDelegate
ITimeConsumer
ITransformer
IUpdateDriver
ImpactAudio
Input
Input
AnimatedHandOVR
Compatibility
OpenXR
OpenXR
Constants
HandFingerUtils
HandJointUtils
HandSkeleton
HandSkeletonJoint
ICopyFrom
IReadOnlyHandSkeleton
IReadOnlyHandSkeletonJointList
ReadOnlyHandJointPoses
Constants
Controller
ControllerAnimatedHand
ControllerDataAsset
ControllerRef
DataModifier
DataSource
DefaultHandSkeletonProvider
DominantHandRef
Filter
Filter
HandData
HandFilter
FromOVRControllerDataSource
FromOVRHandDataSource
FromOVRHmdDataSource
Hand
HandDataAsset
HandFingerUtils
HandJointUtils
HandMirroring
HandMirroring
HandSpace
HandsSpace
HandMirroring
HandSpace
HandsSpace
HandRef
HandSkeletonJoint
HandSkeletonOVR
HandSourceInjector
Hmd
HmdRef
IAxis1D
IAxis2D
IButton
IController
IControllerDataModifier
ICopyFrom
IDataSource
IDataSource
IHand
IHandSkeletonProvider
IHmd
IOVRCameraRigRef
IOneEuroFilter
IReadOnlyHandSkeleton
IReadOnlyHandSkeletonJointList
ITrackingToWorldTransformer
IUsage
JointsRadiusFeature
OVRCameraRigRef
OVRControllerUtility
OVRInputDeviceActiveState
OVRNearTouch
OVRPointerPoseSelector
OVRSkeletonData
OVRTouch
OneEuroFilter
ScrollInputProvider
SetDisplayRefresh
SkeletonJointsCache
SyntheticHand
TrackingToWorldTransformerOVR
UnityXR
UnityXR
FromOpenXRHandDataSource
FromOpenXRHandDataSource
OpenXRHandDataAsset
OpenXRHandDataAsset
Constants
FromUnityXRHandDataSource
UsageAxis1DMapping
UsageAxis2DMapping
UsageButtonMapping
UsageTouchMapping
Visuals
Visuals
OVRControllerVisual
Interactable
InteractableGroup
InteractableGroupView
InteractableTriggerBroadcaster
InteractableUnityEventWrapper
Interactor
InteractorActiveState
InteractorControllerDecorator
InteractorDebugVisual
InteractorGroup
InteractorUnityEventWrapper
InterfaceAttribute
JoystickPoseMovement
JoystickPoseMovementProvider
Locomotion
Locomotion
AdjustableAudio
AnimatedSnapTurnVisuals
CapsuleLocomotionHandler
CharacterController
FirstPersonLocomotor
FlyingLocomotor
ILocomotionEventBroadcaster
ILocomotionEventHandler
LocomotionActiveState
LocomotionAxisTurnerInteractable
LocomotionAxisTurnerInteractor
LocomotionComfortVignetteSetting
LocomotionEvent
LocomotionEventsConnection
LocomotionGate
LocomotionGate
GateSection
LocomotionGateUnityEventWrapper
LocomotionSeatedSetting
LocomotionTunneling
LocomotionTurnSliderSetting
LocomotionTurnerInteractable
LocomotionTurnerInteractor
LocomotionTurnerInteractorEventsWrapper
LocomotionTurnerInteractorVisual
LocomotorSound
MenuToggler
PlayerLocomotor
SlideLocomotionBroadcaster
StepLocomotionBroadcaster
TeleportCandidateComputer
TeleportInteractable
TeleportInteractor
TurnArrowVisuals
TurnLocomotionBroadcaster
WallPenetrationTunneling
WristAngleActiveState
MAction
MicroGestureUnityEventWrapper
MinMaxPair
OVR
OVR
Input
Input
OVRAxis1D
OVRAxis1D
RemapConfig
OVRAxis2D
OVRButton
OVRButtonActiveState
OVRControllerInHandActiveState
OVRButtonAxis1D
OVRControllerMatchesProfileActiveState
OneGrabPhysicsJointTransformer
OneGrabRotateTransformer
OneGrabRotateTransformer
OneGrabRotateConstraints
OneGrabSphereTransformer
OneGrabTranslateTransformer
OneGrabTranslateTransformer
OneGrabTranslateConstraints
OptionalAttribute
PhysicsGrabbable
PointableCanvas
PointableCanvasEventArgs
PointableCanvasMesh
PointableCanvasModule
PointableCanvasModule
Pointer
PointableCanvasUnityEventWrapper
PointableElement
PointableUnityEventWrapper
PointerEvent
PointerInteractable
PointerInteractor
PokeInteractable
PokeInteractable
DragThresholdsConfig
MinThresholdsConfig
PositionPinningConfig
RecoilAssistConfig
PokeInteractor
PoseDetection
PoseDetection
Debug
Debug
IActiveStateModel
HmdOffset
IFeatureStateThreshold
IFeatureStateThresholds
IFeatureThresholds
IFingerFeatureStateProvider
IJointDeltaProvider
ITransformFeatureStateProvider
Sequence
SequenceActiveState
ShapeRecognizer
ShapeRecognizer
FingerFeatureConfig
FingerFeatureConfigList
ShapeRecognizerActiveState
TransformRecognizerActiveState
PoseUtils
PressureBreakable
PressureSquishable
RayInteractable
RayInteractor
Samples
Samples
AnchoredWorldSpaceDistanceScaler
AnimatorOverrideLayerWeigth
ArcAffordanceController
CarouselView
ColorChanger
ConstantRotation
CountdownTimer
DropDownGroup
EnableTargetOnStart
FadeTextAfterActive
HideHandVisualOnGrab
ISDKSceneMenuManager
ListSnapPoseDelegateRoundedBoxVisual
LocomotionTutorialAnimationUnityEventWrapper
LocomotionTutorialProgressTracker
LocomotionTutorialTurnVisual
LookAtTarget
MRPassThroughHandVisualize
MRPassThroughMaterialChanger
MRPassthrough
MRPassthrough
PassThrough
ManipulatorAffordanceController
MenuWristButton
OneGrabScaleTransformer
OneGrabScaleTransformer
OneGrabScaleConstraints
OpacityFromAnimatedTransformController
PalmMenu
PalmMenu
DominantHandGameObjectFilter
MatchNonDominantPalmWorldSpaceTransform
PalmMenuExample
PalmMenuExampleButtonHandlers
PanelWithManipulatorsBorderAffordanceController
PanelWithManipulatorsStateSignaler
ParentScaleInverter
PingPongPaddle
PoseUseSample
RespawnOnDrop
RotationAudioEvents
SamplesInfoPanel
ScaleAudioEvents
ScaleModifier
SceneLoader
Slingshot
SlingshotPellet
ShoulderEstimatePosition
SkeletonDebugGizmos
SnapInteractable
SnapInteractor
Surfaces
Surfaces
BoundsClipper
ClippedPlaneSurface
ColliderSurface
IBounds
IBoundsClipper
IClippedSurface
ICylinderClipper
ISurface
ISurfacePatch
NavMeshSurface
PlaneSurface
SurfaceHit
UnionClippedPlaneSurface
TagSet
TagSetFilter
Throw
Throw
IPoseInputDevice
IThrowVelocityCalculator
IVelocityCalculator
RANSACVelocity
RANSACVelocity
TimedPose
TogglerActiveState
TouchHandGrabInteractable
TouchHandGrabInteractor
TransformExtensions
TransformTrackingToWorldTransformer
TransformerUtils
TransformerUtils
ConstrainedAxis
FloatRange
PositionConstraints
RotationConstraints
ScaleConstraints
TransformerUtils
ConstrainedAxis
FloatRange
PositionConstraints
RotationConstraints
ScaleConstraints
TransformsPolyline
TunnelingEffect
TwoGrabPlaneTransformer
TwoGrabPlaneTransformer
TwoGrabPlaneConstraints
TwoGrabRotateTransformer
TwoGrabRotateTransformer
TwoGrabRotateConstraints
UITheme
UITheme
ElementColors
UIThemeManager
UniqueIdentifier
UnityCanvas
UnityCanvas
OVRCanvasMeshRenderer
OVRCanvasMeshRenderer
Properties
UnityXR
UnityXR
FromUnityXRHmdDataSource
ValueToClassDecorator
VersionTextGUI
PageScroll
PageScroll
Page
PanelHoverState
PanelSetup
PbrMaterialDefinition
RectSizeConstraint
RoundedBoxUIProperties
RoundedBoxVideoController
SkinnedRoundedBoxMesh
SwipeGesture
UpdateRoundedBoxAnchorConstraint
VirtualLayout
Code samples
Downloads
Release notes
Supported platforms
Oculus
​
Back to Supported platforms
HandGrabAPI Class
Extends
MonoBehaviour
The
HandGrabAPI
class provides functionality to detect finger grabs using multiple
IFingerAPI
implementations.
It distinguishes between pinch and palm grabs and allows customization of the grab detectors through dependency injection, using the
InjectOptionalFingerPinchAPI
and
InjectOptionalFingerGrabAPI
methods.
Properties
IHand
Hand
[Get]
Gets the IHand implementation associated with this instance.
This property is crucial for accessing hand-specific data required for grab detection.
IHmd
Hmd
[Get]
Protected Functions
virtual void
Awake
( )
virtual void
Start
( )
Member Functions
HandFingerFlags
HandPinchGrabbingFingers
( )
Returns the flags indicating which fingers are currently performing a pinch grab.
Returns
A HandFingerFlags value representing the fingers involved in pinch grabs.
HandFingerFlags
HandPalmGrabbingFingers
( )
Returns the flags indicating which fingers are currently performing a palm grab.
Returns
A HandFingerFlags value representing the fingers involved in palm grabs.
bool
IsHandPinchGrabbing
( in
GrabbingRule
fingers )
Determines if the hand is currently performing a pinch grab according to the specified rules.
Parameters
fingers
The
GrabbingRule
defining required and optional fingers for the grab.
Returns
True if the hand meets the pinch grab conditions; otherwise, false.
bool
IsHandPalmGrabbing
( in
GrabbingRule
fingers )
Determines if the hand is currently performing a palm grab according to the specified rules.
Parameters
fingers
The
GrabbingRule
defining required and optional fingers for the grab.
Returns
True if the hand meets the palm grab conditions; otherwise, false.
bool
IsSustainingGrab
( in
GrabbingRule
fingers,
HandFingerFlags grabbingFingers )
Determines if the grab condition is sustained based on the specified grabbing rules and current grabbing fingers.
Parameters
fingers
The
GrabbingRule
specifying required and optional fingers.
grabbingFingers
The current state of fingers that are grabbing.
Returns
True if the grab condition is sustained; otherwise, false.
bool
IsHandSelectPinchFingersChanged
( in
GrabbingRule
fingers )
Determine whether the state of any of the finger pinches have changed this frame to the target pinching state (on/off).
Parameters
fingers
Finger
GrabbingRule
to check.
Returns
True if any finger's pinch state has changed according to the rules; otherwise, false.
bool
IsHandSelectPalmFingersChanged
( in
GrabbingRule
fingers )
Determines whether the state of any of the finger grabs have changed this frame to the target grabbing state (on/off).
Parameters
fingers
Finger
GrabbingRule
to check.
Returns
True if any finger's grab state has changed according to the rules; otherwise, false.
bool
IsHandUnselectPinchFingersChanged
( in
GrabbingRule
fingers )
Determines whether the state of any of the finger pinches have changed this frame to the target pinching state (on/off).
Parameters
fingers
Finger
GrabbingRule
to check.
Returns
True if any finger's pinch state has changed according to the rules; otherwise, false.
bool
IsHandUnselectPalmFingersChanged
( in
GrabbingRule
fingers )
Determines whether the state of any of the finger grabs have changed this frame to the target grabbing state (on/off).
Parameters
fingers
Finger
GrabbingRule
to check.
Returns
True if any finger's grab state has changed according to the rules; otherwise, false.
Vector3
GetPinchCenter
( )
Calculates the center position of the pinch grab based on the wrist offset.
Returns
The world position of the pinch center.
Vector3
GetPalmCenter
( )
Calculates the center position of the palm grab based on the wrist offset.
Returns
The world position of the palm center.
float
GetHandPinchScore
( in
GrabbingRule
fingers,
bool includePinching )
Retrieves the overall score of how well the hand is performing a pinch grab based on specified rules.
Parameters
fingers
The rules defining required and optional fingers for the pinch grab.
includePinching
Indicates whether to include currently pinching fingers in the score calculation.
Returns
A float representing the pinch grab score, where higher values indicate a stronger grab.
float
GetHandPalmScore
( in
GrabbingRule
fingers,
bool includeGrabbing )
Retrieves the overall score of how well the hand is performing a palm grab based on specified rules.
Parameters
fingers
The
GrabbingRule
defining required and optional fingers for the palm grab.
includeGrabbing
Indicates whether to include currently grabbing fingers in the score calculation.
Returns
A float representing the palm grab score, where higher values indicate a stronger grab.
float
GetFingerPinchStrength
( HandFinger finger )
Retrieves the strength of the pinch grab for a specific finger.
Parameters
finger
The HandFinger to check the pinch strength for.
Returns
A float representing the pinch strength, where higher values indicate a stronger pinch.
float
GetFingerPinchPercent
( HandFinger finger )
Retrieves the percentage of completion for a pinch gesture for a specific finger.
Parameters
finger
The HandFinger to check the pinch percentage for.
Returns
A float representing the percentage of the pinch completion.
float
GetFingerPinchDistance
( HandFinger finger )
Retrieves the distance between the thumb and the specified finger during a pinch gesture.
Parameters
finger
The HandFinger to measure the distance from the thumb.
Returns
A float representing the distance between the thumb and the specified finger during a pinch.
float
GetFingerPalmStrength
( HandFinger finger )
Retrieves the strength of the palm grab for a specific finger.
Parameters
finger
The HandFinger to check the palm grab strength for.
Returns
A float representing the palm grab strength, where higher values indicate a stronger grab.
void
SetPinchGrabParam
( PinchGrabParam paramId,
float paramVal )
float
GetPinchGrabParam
( PinchGrabParam paramId )
bool
GetFingerIsGrabbing
( HandFinger finger )
Checks if a specific finger is currently grabbing.
Parameters
finger
The finger to check for grabbing status.
Returns
True if the specified finger is grabbing; otherwise, false.
bool
GetFingerIsPalmGrabbing
( HandFinger finger )
void
InjectAllHandGrabAPI
(
IHand
hand )
Injects custom IHand implementations for the
HandGrabAPI
.
This method facilitates unit testing.
Parameters
hand
The custom IHand implementation to inject.
void
InjectHand
(
IHand
hand )
void
InjectOptionalHmd
(
IHmd
hmd )
void
InjectOptionalFingerPinchAPI
(
IFingerAPI
fingerPinchAPI )
Injects an optional custom implementation for the pinch grab API.
Parameters
fingerPinchAPI
The custom pinch grab
IFingerAPI
to inject.
void
InjectOptionalFingerGrabAPI
(
IFingerAPI
fingerGrabAPI )
Injects an optional custom implementation for the palm grab API.
Parameters
fingerGrabAPI
The custom palm grab
IFingerAPI
to inject.
Did you find this page helpful?