I’m creating a 2d game and the animation transitions 's exit time and transition durations are set to numbers which I don’t want i.e not 1 for exit time and 0 for transition duration.
How to find and set all the transitions’ settings (animation duration/ exit time) of a given animator programmatically?
var stateMachine = _animatorController.layers[0].stateMachine;
var states = stateMachine.states;
List<AnimatorStateTransition> allTransitions = new List<AnimatorStateTransition>();
foreach (var state in states)
{
allTransitions.AddRange(state.state.transitions);
}
foreach (var transition in allTransitions)
{
transition.duration = 0;
transition.exitTime = 1;
}
The _animatorController is something I feed to my Editor Window with:
_animatorController = (AnimatorController)EditorGUILayout.ObjectField(_animatorController,
typeof(AnimatorController), true);
I don’t know how to do this automatically every time a new transition is created, probably through events but I’m not familiar with that kind of stuff, so right now what I do is simply clean the specific Animator Controller.
You could also get every Animation Controller in the project to do on every Animation Controller.
thanks. what class are these “var’s”?
a bit unreadable
_animatorController is it a “RuntimeAnimatorController”?
or an “Animator”?
Or something entirely else?
Animator and RuntimeAnimatorController dont have a “layers” array.
I know this is an old thread, but it was one of the first Google hits that I got. So, for anyone like @OC_Raiz that’s interested, this is my code. Hope it helps.
var controller = animator.runtimeAnimatorController;
var stateMachine = ((AnimatorController)controller).layers[layerIndex].stateMachine;
var states = stateMachine.states;
List<AnimatorStateTransition> allTransitions = new List<AnimatorStateTransition>();
foreach (var state in states)
{
allTransitions.AddRange(state.state.transitions);
}
foreach (var transition in allTransitions)
{
transition.duration = 0;
transition.exitTime = 1;
}
Wait… all of these solutions that use the AnimatorController class wouldn’t work in build, though… since they are using an extension of the UnityEditor class. Right?
That’s right, but they don’t have to. OnValidate is only called in the editor, anyway. You’ll have to make sure to wrap the code in #if UNITY_EDITOR precompiler flags, though, for the build to work. I’ll edit the above snippet accordingly.