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.
Inheritance
Inherited Members
Namespace: UnityEngine.XR.Interaction.Toolkit.Transformers
Syntax
[AddComponentMenu("XR/Transformers/XR General Grab Transformer", 11)]
[HelpURL("https://docs.unity.cn/Packages/com.unity.xr.interaction.toolkit@2.4/api/UnityEngine.XR.Interaction.Toolkit.Transformers.XRGeneralGrabTransformer.html")]
public class XRGeneralGrabTransformer : XRBaseGrabTransformer, IXRGrabTransformer
Properties
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
allowTwoHandedScaling
Allow scaling when using multi-grab interaction.
Declaration
public bool allowTwoHandedScaling { get; set; }
Property Value
Type | Description |
---|---|
Boolean |
clampScaling
If enabled, scaling will abide by ratio ranges defined by minimumScaleRatio and maximumScaleRatio.
Declaration
public bool clampScaling { get; set; }
Property Value
Type | Description |
---|---|
Boolean |
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
maximumScaleRatio
Maximum scale multiplier applied to the initial scale captured on start.
Declaration
public float maximumScaleRatio { get; set; }
Property Value
Type | Description |
---|---|
Single |
minimumScaleRatio
Minimum scale multiplier applied to the initial scale captured on start.
Declaration
public float minimumScaleRatio { get; set; }
Property Value
Type | Description |
---|---|
Single |
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
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
scaleMultiplier
Scales the distance of displacement between interactors needed to modify the scale interactable.
Declaration
public float scaleMultiplier { get; set; }
Property Value
Type | Description |
---|---|
Single |
thresholdMoveRatioForScale
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 |
---|---|
Single |
Methods
Awake()
See MonoBehaviour.
Declaration
protected void Awake()
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 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;