Interface IPlatformAnimatorBindings
The IPlatformAnimatorBindings interface is used to provide platform-specific bindings for the animator service. This is used, for example, to identify which animator controllers are referenced by the avatar's platform-specific components, and to process platform-specific state behaviours.
public interface IPlatformAnimatorBindings
Methods
CommitControllers(GameObject, IDictionary<object, RuntimeAnimatorController>)
Updates any innate controllers to reference new animator controllers.
void CommitControllers(GameObject root, IDictionary<object, RuntimeAnimatorController> controllers)
Parameters
rootGameObjectcontrollersIDictionary<object, RuntimeAnimatorController>
CommitStateBehaviour(CommitContext, StateMachineBehaviour)
Invoked when a StateMachineBehavior is being committed, to allow for any platform-specific modifications. For example, in VRChat, this is used to replace the virtual layer indexes with the actual layer indexes in the VRChatAnimatorLayerControl behavior.
bool CommitStateBehaviour(CommitContext context, StateMachineBehaviour behaviour)
Parameters
contextCommitContextbehaviourStateMachineBehaviour
Returns
- bool
True to retain this state behavior, false to remove it on commit
GetInnateControllers(GameObject)
Returns any animator controllers that are referenced by platform-specific assets (e.g. VRCAvatarDescriptor). The bool flag indicates whether the controller is overridden (true) or left as default (false).
IEnumerable<(object, RuntimeAnimatorController, bool)> GetInnateControllers(GameObject root)
Parameters
rootGameObject
Returns
- IEnumerable<(object, RuntimeAnimatorController, bool)>
IsSpecialMotion(Motion)
If true, the motion asset should be maintained as-is without replacement or modification.
bool IsSpecialMotion(Motion m)
Parameters
mMotion
Returns
OnParameterTypeChanges(VirtualAnimatorController, IEnumerable<(string, AnimatorControllerParameterType, AnimatorControllerParameterType)>)
Invoked when the type of an existing parameter is changed. This is used in the VRChat bindings to adjust parameter drivers when a parameter is changed from bool to float, in order to preserve behavior.
void OnParameterTypeChanges(VirtualAnimatorController controller, IEnumerable<(string, AnimatorControllerParameterType, AnimatorControllerParameterType)> changes)
Parameters
controllerVirtualAnimatorControllerThe controller that was modified
changesIEnumerable<(string, AnimatorControllerParameterType, AnimatorControllerParameterType)>A map of (parameter name, old type, new type)
PreCommitController(VirtualAnimatorController)
Invoked just before committing an animator controller. This callback can be used, for example, to ensure that any synthetic parameters are added to the controller. Note that, if multiple controllers share animation clips or other objects, changes to those objects may not be reflected in the final animator controller assets, as they may have already been committed to unity objects.
void PreCommitController(VirtualAnimatorController controller)
Parameters
controllerVirtualAnimatorController
RemapPathsInStateBehaviour(StateMachineBehaviour, Func<string, string?>)
Invoked when path remappings are being processed to apply any changed mappings to state behaviors. In VRChat, this is used to remap object paths in VRCAnimatorPlayAudio
void RemapPathsInStateBehaviour(StateMachineBehaviour behaviour, Func<string, string?> remapPath)
Parameters
behaviourStateMachineBehaviourThe behaviour to remap
remapPathFunc<string, string>A function which remaps old paths to new paths (or to null, if the corresponding object was deleted)
VirtualizeStateBehaviour(CloneContext, StateMachineBehaviour)
Invoked after a StateMachineBehavior is cloned, to allow for any platform-specific modifications. For example, in VRChat, this is used to replace the layer indexes with virtual layer indexes in the VRChatAnimatorLayerControl behavior.
Note that, if we're re-activating the virtual animator controller after committing, this will be re-invoked with the same behaviour it had previously cloned. This allows for again converting between virtual and physical layer indexes.
void VirtualizeStateBehaviour(CloneContext context, StateMachineBehaviour behaviour)
Parameters
contextCloneContextbehaviourStateMachineBehaviour