docs.unity3d.com
Search Results for

    Show / Hide Table of Contents

    Class XRGeneralGrabTransformer

    Grab transformer which supports moving and rotating unconstrained with one or two interactors. Also allows clamped or unclamped scaling when using two interactors. Allows axis constraints on translation. This is the default grab transformer.

    Inheritance
    object
    Object
    Component
    Behaviour
    MonoBehaviour
    XRBaseGrabTransformer
    XRGeneralGrabTransformer
    Implements
    IXRGrabTransformer
    Inherited Members
    XRBaseGrabTransformer.canProcess
    XRBaseGrabTransformer.Start()
    XRBaseGrabTransformer.OnDestroy()
    XRBaseGrabTransformer.OnLink(XRGrabInteractable)
    XRBaseGrabTransformer.OnUnlink(XRGrabInteractable)
    MonoBehaviour.IsInvoking()
    MonoBehaviour.CancelInvoke()
    MonoBehaviour.Invoke(string, float)
    MonoBehaviour.InvokeRepeating(string, float, float)
    MonoBehaviour.CancelInvoke(string)
    MonoBehaviour.IsInvoking(string)
    MonoBehaviour.StartCoroutine(string)
    MonoBehaviour.StartCoroutine(string, object)
    MonoBehaviour.StartCoroutine(IEnumerator)
    MonoBehaviour.StopCoroutine(IEnumerator)
    MonoBehaviour.StopCoroutine(Coroutine)
    MonoBehaviour.StopCoroutine(string)
    MonoBehaviour.StopAllCoroutines()
    MonoBehaviour.print(object)
    MonoBehaviour.useGUILayout
    MonoBehaviour.runInEditMode
    Behaviour.enabled
    Behaviour.isActiveAndEnabled
    Component.GetComponent(Type)
    Component.GetComponent<T>()
    Component.TryGetComponent(Type, out Component)
    Component.TryGetComponent<T>(out T)
    Component.GetComponent(string)
    Component.GetComponentInChildren(Type, bool)
    Component.GetComponentInChildren(Type)
    Component.GetComponentInChildren<T>(bool)
    Component.GetComponentInChildren<T>()
    Component.GetComponentsInChildren(Type, bool)
    Component.GetComponentsInChildren(Type)
    Component.GetComponentsInChildren<T>(bool)
    Component.GetComponentsInChildren<T>(bool, List<T>)
    Component.GetComponentsInChildren<T>()
    Component.GetComponentsInChildren<T>(List<T>)
    Component.GetComponentInParent(Type, bool)
    Component.GetComponentInParent(Type)
    Component.GetComponentInParent<T>(bool)
    Component.GetComponentInParent<T>()
    Component.GetComponentsInParent(Type, bool)
    Component.GetComponentsInParent(Type)
    Component.GetComponentsInParent<T>(bool)
    Component.GetComponentsInParent<T>(bool, List<T>)
    Component.GetComponentsInParent<T>()
    Component.GetComponents(Type)
    Component.GetComponents(Type, List<Component>)
    Component.GetComponents<T>(List<T>)
    Component.GetComponents<T>()
    Component.CompareTag(string)
    Component.SendMessageUpwards(string, object, SendMessageOptions)
    Component.SendMessageUpwards(string, object)
    Component.SendMessageUpwards(string)
    Component.SendMessageUpwards(string, SendMessageOptions)
    Component.SendMessage(string, object)
    Component.SendMessage(string)
    Component.SendMessage(string, object, SendMessageOptions)
    Component.SendMessage(string, SendMessageOptions)
    Component.BroadcastMessage(string, object, SendMessageOptions)
    Component.BroadcastMessage(string, object)
    Component.BroadcastMessage(string)
    Component.BroadcastMessage(string, SendMessageOptions)
    Component.transform
    Component.gameObject
    Component.tag
    Object.GetInstanceID()
    Object.GetHashCode()
    Object.Equals(object)
    Object.Instantiate(Object, Vector3, Quaternion)
    Object.Instantiate(Object, Vector3, Quaternion, Transform)
    Object.Instantiate(Object)
    Object.Instantiate(Object, Transform)
    Object.Instantiate(Object, Transform, bool)
    Object.Instantiate<T>(T)
    Object.Instantiate<T>(T, Vector3, Quaternion)
    Object.Instantiate<T>(T, Vector3, Quaternion, Transform)
    Object.Instantiate<T>(T, Transform)
    Object.Instantiate<T>(T, Transform, bool)
    Object.Destroy(Object, float)
    Object.Destroy(Object)
    Object.DestroyImmediate(Object, bool)
    Object.DestroyImmediate(Object)
    Object.FindObjectsOfType(Type)
    Object.FindObjectsOfType(Type, bool)
    Object.FindObjectsByType(Type, FindObjectsSortMode)
    Object.FindObjectsByType(Type, FindObjectsInactive, FindObjectsSortMode)
    Object.DontDestroyOnLoad(Object)
    Object.FindObjectsOfType<T>()
    Object.FindObjectsByType<T>(FindObjectsSortMode)
    Object.FindObjectsOfType<T>(bool)
    Object.FindObjectsByType<T>(FindObjectsInactive, FindObjectsSortMode)
    Object.FindObjectOfType<T>()
    Object.FindObjectOfType<T>(bool)
    Object.FindFirstObjectByType<T>()
    Object.FindAnyObjectByType<T>()
    Object.FindFirstObjectByType<T>(FindObjectsInactive)
    Object.FindAnyObjectByType<T>(FindObjectsInactive)
    Object.FindObjectOfType(Type)
    Object.FindFirstObjectByType(Type)
    Object.FindAnyObjectByType(Type)
    Object.FindObjectOfType(Type, bool)
    Object.FindFirstObjectByType(Type, FindObjectsInactive)
    Object.FindAnyObjectByType(Type, FindObjectsInactive)
    Object.ToString()
    Object.name
    Object.hideFlags
    object.Equals(object, object)
    object.GetType()
    object.MemberwiseClone()
    object.ReferenceEquals(object, object)
    Namespace: UnityEngine.XR.Interaction.Toolkit.Transformers
    Assembly: Unity.XR.Interaction.Toolkit.dll
    Syntax
    [AddComponentMenu("XR/Transformers/XR General Grab Transformer", 11)]
    [HelpURL("https://docs.unity3d.com/Packages/com.unity.xr.interaction.toolkit@3.0/api/UnityEngine.XR.Interaction.Toolkit.Transformers.XRGeneralGrabTransformer.html")]
    public class XRGeneralGrabTransformer : XRBaseGrabTransformer, IXRGrabTransformer

    Properties

    allowOneHandedScaling

    Allow one handed scaling using the scale value provider if available.

    Declaration
    public bool allowOneHandedScaling { get; set; }
    Property Value
    Type Description
    bool
    See Also
    XRGrabInteractable

    allowTwoHandedRotation

    Determines how rotation is calculated when using two hands for the grab interaction.

    Declaration
    public XRGeneralGrabTransformer.TwoHandedRotationMode allowTwoHandedRotation { get; set; }
    Property Value
    Type Description
    XRGeneralGrabTransformer.TwoHandedRotationMode
    See Also
    XRGeneralGrabTransformer.TwoHandedRotationMode

    allowTwoHandedScaling

    Allow scaling when using multi-grab interaction.

    Declaration
    public bool allowTwoHandedScaling { get; set; }
    Property Value
    Type Description
    bool
    See Also
    XRGrabInteractable

    clampScaling

    If enabled, scaling will abide by ratio ranges defined by minimumScaleRatio and maximumScaleRatio.

    Declaration
    public bool clampScaling { get; set; }
    Property Value
    Type Description
    bool
    See Also
    XRGrabInteractable

    constrainedAxisDisplacementMode

    Determines how the constrained axis displacement mode is computed.

    Declaration
    public XRGeneralGrabTransformer.ConstrainedAxisDisplacementMode constrainedAxisDisplacementMode { get; set; }
    Property Value
    Type Description
    XRGeneralGrabTransformer.ConstrainedAxisDisplacementMode
    See Also
    XRGeneralGrabTransformer.ConstrainedAxisDisplacementMode

    maximumScaleRatio

    Maximum scale multiplier applied to the initial scale captured on start.

    Declaration
    public float maximumScaleRatio { get; set; }
    Property Value
    Type Description
    float
    See Also
    XRGrabInteractable

    minimumScaleRatio

    Minimum scale multiplier applied to the initial scale captured on start.

    Declaration
    public float minimumScaleRatio { get; set; }
    Property Value
    Type Description
    float
    See Also
    XRGrabInteractable

    oneHandedScaleSpeed

    Scaling speed over time for one handed scaling based on the IXRScaleValueProvider

    Declaration
    public float oneHandedScaleSpeed { get; set; }
    Property Value
    Type Description
    float
    See Also
    XRGrabInteractable

    permittedDisplacementAxes

    Permitted axes for translation displacement relative to the object's initial rotation.

    Declaration
    public XRGeneralGrabTransformer.ManipulationAxes permittedDisplacementAxes { get; set; }
    Property Value
    Type Description
    XRGeneralGrabTransformer.ManipulationAxes
    See Also
    XRGeneralGrabTransformer.ManipulationAxes

    registrationMode

    Controls how this grab transformer will be registered automatically at startup.

    Declaration
    protected override XRBaseGrabTransformer.RegistrationMode registrationMode { get; }
    Property Value
    Type Description
    XRBaseGrabTransformer.RegistrationMode
    Overrides
    XRBaseGrabTransformer.registrationMode
    Remarks

    This can be overridden in derived classes.

    Examples

    If you want your derived class to register as a Multiple Grab Transformer:

      protected override RegisterMode registrationMode => RegisterMode.Multiple;
    
    See Also
    XRBaseGrabTransformer.RegistrationMode

    scaleMultiplier

    Scales the distance of displacement between interactors needed to modify the scale interactable.

    Declaration
    public float scaleMultiplier { get; set; }
    Property Value
    Type Description
    float
    See Also
    XRGrabInteractable

    thresholdMoveRatioForScale

    (Two Handed Scaling) Percentage as a measure of 0 to 1 of scaled relative hand displacement required to trigger scale operation. If this value is 0f, scaling happens the moment both grab interactors move closer or further away from each other. Otherwise, this percentage is used as a threshold before any scaling happens.

    Declaration
    public float thresholdMoveRatioForScale { get; set; }
    Property Value
    Type Description
    float
    See Also
    XRGrabInteractable

    Methods

    Awake()

    See MonoBehaviour.

    Declaration
    protected void Awake()
    See Also
    XRGrabInteractable

    OnGrab(XRGrabInteractable)

    Called by Unity when the given Interactable is grabbed (in other words, when entering the Select state). This method won't be called again until the Interactable is released by every Interactor. Use this to do any code initialization based on the first Interactor that selects the Interactable.

    Declaration
    public override void OnGrab(XRGrabInteractable grabInteractable)
    Parameters
    Type Name Description
    XRGrabInteractable grabInteractable

    The XR Grab Interactable being grabbed.

    Overrides
    XRBaseGrabTransformer.OnGrab(XRGrabInteractable)
    Remarks

    In other words, this will be called when the selection count changes from 0 to 1.

    See Also
    OnGrabCountChanged(XRGrabInteractable, Pose, Vector3)
    Grab()

    OnGrabCountChanged(XRGrabInteractable, Pose, Vector3)

    Called by Unity each time the number of selections changes for the given Interactable while grabbed by at least one Interactor, including when it is first grabbed. Use this to do any code initialization based on each Interactor currently selecting the Interactable, for example computing the initial distance between both Interactors grabbing the object.

    Declaration
    public override void OnGrabCountChanged(XRGrabInteractable grabInteractable, Pose targetPose, Vector3 localScale)
    Parameters
    Type Name Description
    XRGrabInteractable grabInteractable

    The XR Grab Interactable being grabbed.

    Pose targetPose

    The current target pose for the current frame.

    Vector3 localScale

    The current target scale of the Interactable's transform relative to the GameObject's parent.

    Overrides
    XRBaseGrabTransformer.OnGrabCountChanged(XRGrabInteractable, Pose, Vector3)
    Remarks

    There will always be at least one Interactor selecting the Interactable when this method is called. In other words, this will be called when the selection count changes from 0 to 1 and whenever it subsequently changes while still above 0. This method is called by Unity right before Process(XRGrabInteractable, UpdatePhase, ref Pose, ref Vector3) if the selection count changed.

    Examples

    To get the number of Interactors selecting the Interactable in your implementation method:

      grabInteractable.interactorsSelecting.Count
    
    See Also
    XRGrabInteractable

    Process(XRGrabInteractable, UpdatePhase, ref Pose, ref Vector3)

    Called by the linked Interactable to calculate the target pose and scale. Modify the value of targetPose and/or localScale (or neither).

    Declaration
    public override void Process(XRGrabInteractable grabInteractable, XRInteractionUpdateOrder.UpdatePhase updatePhase, ref Pose targetPose, ref Vector3 localScale)
    Parameters
    Type Name Description
    XRGrabInteractable grabInteractable

    The XR Grab Interactable to calculate the target pose and scale for.

    XRInteractionUpdateOrder.UpdatePhase updatePhase

    The update phase this is called during.

    Pose targetPose

    The target pose for the current frame.

    Vector3 localScale

    The target scale of the Interactable's transform relative to the GameObject's parent.

    Overrides
    XRBaseGrabTransformer.Process(XRGrabInteractable, XRInteractionUpdateOrder.UpdatePhase, ref Pose, ref Vector3)
    Remarks

    When there is more than one linked grab transformer that can process, the updated value of each ref parameter is passed to each in series according to its order in the list. You can utilize this by, for example, having the first grab transformer compute the target pose, and the second compute just the scale.

    Examples

    If your transformer requires the use of two or more selections, you should first check for that condition in your implementation method:

      if (grabInteractable.interactorsSelecting.Count < 2) return;
    
    See Also
    ProcessInteractable(UpdatePhase)
    XRInteractionUpdateOrder.UpdatePhase

    Implements

    IXRGrabTransformer

    See Also

    XRGrabInteractable
    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)