Class XRDualGrabFreeTransformer
Grab transformer which supports moving and rotating unconstrained with multiple Interactors. Maintains the offset from the attachment points used for each Interactor and points in the direction made by each grab.
Inheritance
Inherited Members
Namespace: UnityEngine.XR.Interaction.Toolkit.Transformers
Syntax
[AddComponentMenu("XR/Transformers/XR Dual Grab Free Transformer", 11)]
[HelpURL("https://docs.unity3d.com/Packages/com.unity.xr.interaction.toolkit@2.4/api/UnityEngine.XR.Interaction.Toolkit.Transformers.XRDualGrabFreeTransformer.html")]
public class XRDualGrabFreeTransformer : XRBaseGrabTransformer, IXRGrabTransformer
Remarks
When there is a single Interactor, this has identical behavior to XRSingleGrabFreeTransformer.
Properties
multiSelectPosition
Controls how multiple interactors combine to drive this interactable's position
Declaration
public XRDualGrabFreeTransformer.PoseContributor multiSelectPosition { get; set; }
Property Value
Type | Description |
---|---|
XRDualGrabFreeTransformer.PoseContributor |
See Also
multiSelectRotation
Controls how multiple interactors combine to drive this interactable's rotation
Declaration
public XRDualGrabFreeTransformer.PoseContributor multiSelectRotation { get; set; }
Property Value
Type | Description |
---|---|
XRDualGrabFreeTransformer.PoseContributor |
See Also
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
Remarks
This can be overridden in derived classes.
protected override RegisterMode registrationMode => RegisterMode.Multiple;
See Also
Methods
OnDrawGizmosSelected()
See MonoBehaviour.
Declaration
protected virtual void OnDrawGizmosSelected()
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 scale of the Interactable's transform relative to the GameObjects parent. |
Overrides
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, XRInteractionUpdateOrder.UpdatePhase, ref Pose, ref Vector3) if the selection count changed.
grabInteractable.interactorsSelecting.Count
Process(XRGrabInteractable, XRInteractionUpdateOrder.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 scale of the Interactable's transform relative to the GameObjects parent. |
Overrides
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.
if (grabInteractable.interactorsSelecting.Count < 2) return;