docs.unity3d.com
Search Results for

    Show / Hide Table of Contents

    Class XRHandSubsystemProvider

    Methods to implement by the implementing provider for an XRHandSubsystem.

    Inheritance
    object
    SubsystemProvider
    SubsystemProvider<XRHandSubsystem>
    XRHandSubsystemProvider
    OpenXRHandProvider
    Inherited Members
    SubsystemProvider<XRHandSubsystem>.TryInitialize()
    SubsystemProvider<XRHandSubsystem>.Start()
    SubsystemProvider<XRHandSubsystem>.Stop()
    SubsystemProvider<XRHandSubsystem>.Destroy()
    SubsystemProvider.running
    object.Equals(object)
    object.Equals(object, object)
    object.GetHashCode()
    object.GetType()
    object.MemberwiseClone()
    object.ReferenceEquals(object, object)
    object.ToString()
    Namespace: UnityEngine.XR.Hands.ProviderImplementation
    Assembly: Unity.XR.Hands.dll
    Syntax
    public abstract class XRHandSubsystemProvider : SubsystemProvider<XRHandSubsystem>

    Properties

    canSurfaceCommonPoseData

    Whether the provider is currently able to surface data from any of TryGetAimPose(Handedness, out Pose), TryGetAimActivateValue(Handedness, out float), TryGetGraspValue(Handedness, out float), TryGetGripPose(Handedness, out Pose), TryGetPinchPose(Handedness, out Pose), TryGetPinchValue(Handedness, out float), or TryGetPinchPose(Handedness, out Pose).

    Declaration
    public virtual bool canSurfaceCommonPoseData { get; }
    Property Value
    Type Description
    bool

    detectedHandMeshLayout

    Describes which version of authored hand meshes is detected for use.

    Declaration
    public virtual XRDetectedHandMeshLayout detectedHandMeshLayout { get; }
    Property Value
    Type Description
    XRDetectedHandMeshLayout

    Methods

    GetFingerShapeConfiguration(XRHandFingerID)

    Gets the XRFingerShapeConfiguration on the current device for the given XRHandFingerID.

    Declaration
    public virtual XRFingerShapeConfiguration GetFingerShapeConfiguration(XRHandFingerID fingerID)
    Parameters
    Type Name Description
    XRHandFingerID fingerID

    Which finger to get the XRFingerShapeConfiguration for.

    Returns
    Type Description
    XRFingerShapeConfiguration

    A populated XRFingerShapeConfiguration representing range of motion for the given XRHandFingerID.

    Remarks

    Called once for each finger on creation so that the subsystem will always have valid configurations to base detection math off of. If the provider does not override this, defaults will be reported - this means that if the device is more constrained in reporting joint data than the defaults, gestures and poses may not be detected correctly. Called after GetHandLayout(NativeArray<bool>) for each finger, but before the subsystem is returned during a call to XRHandSubsystemDescriptor.Create.

    Exceptions
    Type Condition
    ArgumentException

    Will throw an exception if fingerID is not a named value of XRHandFingerID.

    GetHandLayout(NativeArray<bool>)

    Gets the layout of hand joints for this provider, by having the provider mark each index corresponding to a XRHandJointID get marked as true if the provider attempts to track that joint.

    Declaration
    public abstract void GetHandLayout(NativeArray<bool> handJointsInLayout)
    Parameters
    Type Name Description
    NativeArray<bool> handJointsInLayout

    Each index corresponds to a XRHandJointID. For each joint that the provider will attempt to track, mark that spot as true by calling .ToIndex() on that ID.

    Remarks

    Called once on creation so that before the subsystem is even started, the user can immediately create a valid hierarchical structure as soon as they get a reference to the subsystem without even needing to start it. This is called before any call to GetFingerShapeConfiguration(XRHandFingerID).

    TryGetAimActivateValue(Handedness, out float)

    Gets the aim activate value. Will only be called if supportsAimActivateValue is enabled.

    Declaration
    public virtual bool TryGetAimActivateValue(Handedness handedness, out float aimActivateValue)
    Parameters
    Type Name Description
    Handedness handedness

    Which hand to retrieve data for.

    float aimActivateValue

    The aim activate value, if available. Will not be used if false is returned.

    Returns
    Type Description
    bool

    Returns true if successful and the aim activate value was filled out, returns false otherwise.

    TryGetAimPose(Handedness, out Pose)

    Gets the aim pose. Will only be called if supportsAimPose is enabled.

    Declaration
    public virtual bool TryGetAimPose(Handedness handedness, out Pose aimPose)
    Parameters
    Type Name Description
    Handedness handedness

    Which hand to retrieve data for.

    Pose aimPose

    The pose to update the aim pose to, if available. Will not be used if false is returned.

    Returns
    Type Description
    bool

    Returns true if successful and the aim pose was filled out, returns false otherwise.

    TryGetGraspValue(Handedness, out float)

    Gets the grasp value. Will only be called if supportsGraspValue is enabled.

    Declaration
    public virtual bool TryGetGraspValue(Handedness handedness, out float graspValue)
    Parameters
    Type Name Description
    Handedness handedness

    Which hand to retrieve data for.

    float graspValue

    The grasp value, if available. Will not be used if false is returned.

    Returns
    Type Description
    bool

    Returns true if successful and the grasp value was filled out, returns false otherwise.

    TryGetGripPose(Handedness, out Pose)

    Gets the grip pose. Will only be called if supportsGripPose is enabled.

    Declaration
    public virtual bool TryGetGripPose(Handedness handedness, out Pose gripPose)
    Parameters
    Type Name Description
    Handedness handedness

    Which hand to retrieve data for.

    Pose gripPose

    The pose to update the aim pose to, if available. Will not be used if false is returned.

    Returns
    Type Description
    bool

    Returns true if successful and the grip pose was filled out, returns false otherwise.

    TryGetMeshData(ref XRHandMeshDataQueryResult, ref XRHandMeshDataQueryParams)

    Attempt to retrieve hand mesh data from the platform. Only called when TryGetMeshData(out XRHandMeshDataQueryResult, ref XRHandMeshDataQueryParams) is called.

    Declaration
    public virtual bool TryGetMeshData(ref XRHandMeshDataQueryResult result, ref XRHandMeshDataQueryParams queryParams)
    Parameters
    Type Name Description
    XRHandMeshDataQueryResult result

    Output data for hand meshes.

    XRHandMeshDataQueryParams queryParams

    Input data for hand meshes.

    Returns
    Type Description
    bool

    Returns true if successful and either hand has valid data. Otherwise, returns false.

    TryGetPinchPose(Handedness, out Pose)

    Gets the pinch pose. Will only be called if supportsPinchPose is enabled.

    Declaration
    public virtual bool TryGetPinchPose(Handedness handedness, out Pose pinchPose)
    Parameters
    Type Name Description
    Handedness handedness

    Which hand to retrieve data for.

    Pose pinchPose

    The pose to update the pinch pose to, if available. Will not be used if false is returned.

    Returns
    Type Description
    bool

    Returns true if successful and the pinch pose was filled out, returns false otherwise.

    TryGetPinchValue(Handedness, out float)

    Gets the pinch value. Will only be called if supportsPinchValue is enabled.

    Declaration
    public virtual bool TryGetPinchValue(Handedness handedness, out float pinchValue)
    Parameters
    Type Name Description
    Handedness handedness

    Which hand to retrieve data for.

    float pinchValue

    The pinch value, if available. Will not be used if false is returned.

    Returns
    Type Description
    bool

    Returns true if successful and the grasp value was filled out, returns false otherwise.

    TryGetPokePose(Handedness, out Pose)

    Gets the poke pose. Will only be called if supportsPokePose is enabled.

    Declaration
    public virtual bool TryGetPokePose(Handedness handedness, out Pose pokePose)
    Parameters
    Type Name Description
    Handedness handedness

    Which hand to retrieve data for.

    Pose pokePose

    The pose to update the poke pose to, if available. Will not be used if false is returned.

    Returns
    Type Description
    bool

    Returns true if successful and the poke pose was filled out, returns false otherwise.

    TryUpdateHands(UpdateType, ref Pose, NativeArray<XRHandJoint>, ref Pose, NativeArray<XRHandJoint>)

    Attempts to retrieve current hand-tracking data from the provider.

    Declaration
    public abstract XRHandSubsystem.UpdateSuccessFlags TryUpdateHands(XRHandSubsystem.UpdateType updateType, ref Pose leftHandRootPose, NativeArray<XRHandJoint> leftHandJoints, ref Pose rightHandRootPose, NativeArray<XRHandJoint> rightHandJoints)
    Parameters
    Type Name Description
    XRHandSubsystem.UpdateType updateType

    Informs the provider which kind of timing the update is being requested under.

    Pose leftHandRootPose

    Update this and include XRHandSubsystem.UpdateSuccessFlags.LeftHandRootPose in the return value to update the left hand's root pose.

    NativeArray<XRHandJoint> leftHandJoints

    Array of hand joints to fill out for the left hand. These are initialized with a copy of the current joint data for the left hand, so if the last known tracking data for a particular joint is still fine, you don't need to fill out that data again. If you update these, include XRHandSubsystem.UpdateSuccessFlags.LeftHandJoints in the return value to have the changes reflected in the subsystem.

    Pose rightHandRootPose

    Update this and include XRHandSubsystem.UpdateSuccessFlags.RightHandRootPose in the return value to update the right hand's root pose.

    NativeArray<XRHandJoint> rightHandJoints

    Array of hand joints to fill out for the right hand. These are initialized with a copy of the current joint data for the right hand, so if the last known tracking data for a particular joint is still fine, you don't need to fill out that data again. If you update these, include XRHandSubsystem.UpdateSuccessFlags.RightHandJoints in the return value to have the changes reflected in the subsystem.

    Returns
    Type Description
    XRHandSubsystem.UpdateSuccessFlags

    Returns XRHandSubsystem.UpdateSuccessFlags to describe which tracking data was successfully updated.

    In This Article
    Back to top
    Copyright © 2025 Unity Technologies — Trademarks and terms of use
    • Legal
    • Privacy Policy
    • Cookie Policy
    • Do Not Sell or Share My Personal Information
    • Your Privacy Choices (Cookie Settings)