Class ARTransformer
Grab transformer which supports translation, rotation and scaling while respecting the AR environment. This transformer constrains the interactable to the ARPlane during translation.
Inherited Members
Namespace: UnityEngine.XR.Interaction.Toolkit.Transformers
Assembly: Unity.XR.Interaction.Toolkit.dll
Syntax
[AddComponentMenu("XR/Transformers/AR Transformer", 11)]
[HelpURL("https://docs.unity3d.com/Packages/com.unity.xr.interaction.toolkit@3.0/api/UnityEngine.XR.Interaction.Toolkit.Transformers.ARTransformer.html")]
public class ARTransformer : XRBaseGrabTransformer, IXRDropTransformer, IXRGrabTransformer
Remarks
Assumes that AR raycast hits are enabled in the corresponding IARInteractor.
Properties
canProcessOnDrop
Whether this grab transformer opts-in to allowing Process(XRGrabInteractable, UpdatePhase, ref Pose, ref Vector3) to be called by Unity once more after the interactable is deselected by all interactors.
Declaration
public bool canProcessOnDrop { get; }
Property Value
Type | Description |
---|---|
bool |
Remarks
When the grab transformer implements this interface and this property and canProcess both returns true, the Process(XRGrabInteractable, UpdatePhase, ref Pose, ref Vector3) method will be called once more after OnDrop(XRGrabInteractable, DropEventArgs).
See Also
elasticBreakLimit
The break limit of the elastic ratio used when scaling the object. Returns to min/max range over time after scaling beyond this limit.
Declaration
public float elasticBreakLimit { get; set; }
Property Value
Type | Description |
---|---|
float |
See Also
elasticity
Amount of over scale allowed after hitting min/max of range.
Declaration
public float elasticity { get; set; }
Property Value
Type | Description |
---|---|
float |
See Also
enableElasticBreakLimit
Whether to enable the elastic break limit when scaling the object beyond range.
Declaration
public bool enableElasticBreakLimit { get; set; }
Property Value
Type | Description |
---|---|
bool |
See Also
enablePlaneClassificationFilter
Enabling this will filter interactable manipulation down to only planes that match any of the allowed plane classifications.
Declaration
public bool enablePlaneClassificationFilter { get; set; }
Property Value
Type | Description |
---|---|
bool |
See Also
maxScale
The maximum scale of the object.
Declaration
public float maxScale { get; set; }
Property Value
Type | Description |
---|---|
float |
See Also
minScale
The minimum scale of the object.
Declaration
public float minScale { get; set; }
Property Value
Type | Description |
---|---|
float |
See Also
objectPlaneTranslationMode
Controls whether the grab interactable will be constrained vertically, horizontally, or free to move in all axes.
Declaration
public ARTransformer.PlaneTranslationMode objectPlaneTranslationMode { get; set; }
Property Value
Type | Description |
---|---|
ARTransformer.PlaneTranslationMode |
See Also
planeClassifications
The classifications a plane needs to match one of to allow interactable manipulation with. Only used if enablePlaneClassificationFilter is enabled.
Declaration
public PlaneClassifications planeClassifications { get; set; }
Property Value
Type | Description |
---|---|
PlaneClassifications |
Remarks
Only available with AR Foundation version 6.0 or newer.
See Also
planeClassificationsList
The classifications a plane needs to match one of to allow interactable manipulation with. Only used if enablePlaneClassificationFilter is enabled.
Declaration
public List<PlaneClassification> planeClassificationsList { get; set; }
Property Value
Type | Description |
---|---|
List<PlaneClassification> |
See Also
scaleSensitivity
Sensitivity to movement being translated into scale.
Declaration
public float scaleSensitivity { get; set; }
Property Value
Type | Description |
---|---|
float |
See Also
useInteractorOrientation
Controls whether the interactable will use the orientation of the interactor, or not.
Declaration
public bool useInteractorOrientation { get; set; }
Property Value
Type | Description |
---|---|
bool |
See Also
Methods
OnDrop(XRGrabInteractable, DropEventArgs)
Called by Unity when the given Interactable is dropped (in other words, when exiting the Select state). This method won't be called until the Interactable is released by every Interactor. Use this to do any code deinitialization based on the interactable being dropped.
Declaration
public void OnDrop(XRGrabInteractable grabInteractable, DropEventArgs args)
Parameters
Type | Name | Description |
---|---|---|
XRGrabInteractable | grabInteractable | The XR Grab Interactable being dropped. |
DropEventArgs | args | The event args associated with the select exit event. |
Remarks
In other words, this will be called when the selection count changes from 1
to 0
.
args
is only valid during this method call, do not hold a reference to it.
See Also
OnEnable()
See MonoBehaviour.
Declaration
protected void OnEnable()
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 override void OnGrab(XRGrabInteractable grabInteractable)
Parameters
Type | Name | Description |
---|---|---|
XRGrabInteractable | grabInteractable | The XR Grab Interactable being grabbed. |
Overrides
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 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
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
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
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 override void Start()