Class XRBaseGrabTransformer
Abstract base class from which all grab transformer behaviors derive. Instances of this class can be assigned to an XRGrabInteractable using the Inspector by setting the Starting Single Grab Transformers (startingSingleGrabTransformers) and Starting Multiple Grab Transformers (startingMultipleGrabTransformers). This serves as a serializable reference instead of using the runtime list of grab transformers which is not serialized.
Implements
Inherited Members
Namespace: UnityEngine.XR.Interaction.Toolkit.Transformers
Assembly: Unity.XR.Interaction.Toolkit.dll
Syntax
public abstract class XRBaseGrabTransformer : MonoBehaviour, IXRGrabTransformer
Properties
canProcess
Whether this grab transformer can process targets. Transformers that can process targets receive calls to Process(XRGrabInteractable, UpdatePhase, ref Pose, ref Vector3), transformers that cannot process do not. Transformers will still have other event methods called to allow for initialization on the frame the grab changes happens.
Declaration
public virtual bool canProcess { get; }
Property Value
Type | Description |
---|---|
bool |
See Also
registrationMode
Controls how this grab transformer will be registered automatically at startup.
Declaration
protected virtual XRBaseGrabTransformer.RegistrationMode registrationMode { get; }
Property Value
Type | Description |
---|---|
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
Methods
OnDestroy()
This function is called when the MonoBehaviour will be destroyed. See MonoBehaviour.
Declaration
protected virtual void OnDestroy()
See Also
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 virtual void OnGrab(XRGrabInteractable grabInteractable)
Parameters
Type | Name | Description |
---|---|---|
XRGrabInteractable | grabInteractable | The XR Grab Interactable being grabbed. |
Remarks
In other words, this will be called when the selection count changes from 0
to 1
.
See Also
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 virtual 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. |
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
OnLink(XRGrabInteractable)
Called by Unity when the given Interactable links to this grab transformer. Use this to do any code initialization for the given Interactable.
Declaration
public virtual void OnLink(XRGrabInteractable grabInteractable)
Parameters
Type | Name | Description |
---|---|---|
XRGrabInteractable | grabInteractable | The XR Grab Interactable being linked to this transformer. |
See Also
OnUnlink(XRGrabInteractable)
Called by Unity when the given Interactable unlinks from this grab transformer. Use this to do any code cleanup for the given Interactable.
Declaration
public virtual void OnUnlink(XRGrabInteractable grabInteractable)
Parameters
Type | Name | Description |
---|---|---|
XRGrabInteractable | grabInteractable | The XR Grab Interactable being unlinked from this transformer. |
See Also
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 abstract 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. |
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
Start()
This function is called just before any of the Update methods is called the first time. See MonoBehaviour.
Declaration
protected virtual void Start()