Class LocomotionProvider
Base for a behavior that implements a specific type of user locomotion. This behavior communicates with a LocomotionMediator to gain access to the mediator's XRBodyTransformer, which the provider can use to queue IXRBodyTransformations that move the user.
Inherited Members
Namespace: UnityEngine.XR.Interaction.Toolkit.Locomotion
Assembly: Unity.XR.Interaction.Toolkit.dll
Syntax
[DefaultExecutionOrder(-210)]
[MovedFrom("UnityEngine.XR.Interaction.Toolkit")]
public abstract class LocomotionProvider : MonoBehaviour
Properties
canStartMoving
Whether the provider has finished preparing for locomotion and is ready to enter the Moving state. This only applies when locomotionState is Preparing, so there is no need for this implementation to query locomotionState.
Declaration
public virtual bool canStartMoving { get; }
Property Value
Type | Description |
---|---|
bool |
isLocomotionActive
Whether the provider is actively preparing or performing locomotion. This is true when locomotionState is Preparing or Moving, false otherwise.
Declaration
public bool isLocomotionActive { get; }
Property Value
Type | Description |
---|---|
bool |
See Also
locomotionState
The current state of locomotion. The mediator determines this state based on the provider's requests for the XRBodyTransformer.
Declaration
public LocomotionState locomotionState { get; }
Property Value
Type | Description |
---|---|
LocomotionState |
See Also
mediator
The behavior that this provider communicates with for access to the mediator's XRBodyTransformer. If one is not provided, this provider will attempt to locate one during its Awake() call.
Declaration
public LocomotionMediator mediator { get; set; }
Property Value
Type | Description |
---|---|
LocomotionMediator |
transformationPriority
The queue order of this provider's transformations of the XR Origin. The lower the value, the earlier the transformations are applied.
Declaration
public int transformationPriority { get; set; }
Property Value
Type | Description |
---|---|
int |
See Also
Methods
Awake()
See MonoBehaviour.
Declaration
protected virtual void Awake()
OnLocomotionEnding()
Called when locomotion enters the Ended state, after the provider invokes locomotionEnded and before it loses access to the XRBodyTransformer.
Declaration
protected virtual void OnLocomotionEnding()
OnLocomotionStarting()
Called when locomotion enters the Moving state, after the provider gains access to the XRBodyTransformer and before it invokes locomotionStarted.
Declaration
protected virtual void OnLocomotionStarting()
TryEndLocomotion()
Attempts to transition this provider into the Ended state. This succeeds if isLocomotionActive was true when this was called.
Declaration
protected bool TryEndLocomotion()
Returns
Type | Description |
---|---|
bool | Returns true if isLocomotionActive was true when this was called, false otherwise. |
Remarks
After this provider enters the Ended state, it will invoke locomotionEnded and lose access to the XRBodyTransformer. Then during the mediator's Update() in the next frame, the provider will enter the Idle state, unless it has called TryPrepareLocomotion() or TryStartLocomotionImmediately() again.
TryPrepareLocomotion()
Attempts to transition this provider into the Preparing state. This succeeds if isLocomotionActive was false when this was called.
Declaration
protected bool TryPrepareLocomotion()
Returns
Type | Description |
---|---|
bool | Returns true if isLocomotionActive was false when this was called, false otherwise. |
Remarks
If this succeeds, then the provider can enter the Moving state either by calling TryStartLocomotionImmediately() or by waiting for the mediator's next Update() in which the provider's canStartMoving is true. When the provider enters the Moving state, it will invoke locomotionStarted and gain access to the XRBodyTransformer.
TryQueueTransformation(IXRBodyTransformation)
Attempts to queue a transformation to be applied during the active XRBodyTransformer's next Update(). The provider's transformationPriority determines when the transformation is applied in relation to others. The queue attempt only succeeds if the provider is in the Moving state.
Declaration
protected bool TryQueueTransformation(IXRBodyTransformation bodyTransformation)
Parameters
Type | Name | Description |
---|---|---|
IXRBodyTransformation | bodyTransformation | The transformation that will receive a call to Apply(XRMovableBody) in the next Update(). |
Returns
Type | Description |
---|---|
bool | Returns true if the provider has access to the XRBodyTransformer, false otherwise. |
Remarks
This should only be called when locomotionState is Moving, otherwise this method will do nothing and return false.
See Also
TryQueueTransformation(IXRBodyTransformation, int)
Attempts to queue a transformation to be applied during the active XRBodyTransformer's next
Update(). The given priority
determines when the
transformation is applied in relation to others. The queue attempt only succeeds if the provider is in the
Moving state.
Declaration
protected bool TryQueueTransformation(IXRBodyTransformation bodyTransformation, int priority)
Parameters
Type | Name | Description |
---|---|---|
IXRBodyTransformation | bodyTransformation | The transformation that will receive a call to Apply(XRMovableBody) in the next Update(). |
int | priority | Value that determines when to apply the transformation. Transformations with lower priority values are applied before those with higher priority values. |
Returns
Type | Description |
---|---|
bool | Returns true if the provider has access to the XRBodyTransformer, false otherwise. |
Remarks
This should only be called when locomotionState is Moving, otherwise this method will do nothing and return false.
See Also
TryStartLocomotionImmediately()
Attempts to transition this provider into the Moving state. This succeeds if locomotionState was not already Moving when this was called.
Declaration
protected bool TryStartLocomotionImmediately()
Returns
Type | Description |
---|---|
bool | Returns true if locomotionState was not already Moving when this was called, false otherwise. |
Remarks
This method bypasses the check for canStartMoving. After this provider enters the Moving state, it will invoke locomotionStarted and gain access to the XRBodyTransformer.
Events
beforeStepLocomotion
Calls the methods in its invocation list just before the XRBodyTransformer applies this provider's transformation(s). This is invoked at most once per frame while locomotionState is Moving, and only if the provider has queued at least one transformation.
Declaration
public event Action<LocomotionProvider> beforeStepLocomotion
Event Type
Type | Description |
---|---|
Action<LocomotionProvider> |
Remarks
This is invoked before the XRBodyTransformer applies the transformations from other providers as well.
locomotionEnded
Calls the methods in its invocation list when the provider has entered the Ended state.
Declaration
public event Action<LocomotionProvider> locomotionEnded
Event Type
Type | Description |
---|---|
Action<LocomotionProvider> |
See Also
locomotionStarted
Calls the methods in its invocation list when the provider has entered the Moving state.
Declaration
public event Action<LocomotionProvider> locomotionStarted
Event Type
Type | Description |
---|---|
Action<LocomotionProvider> |