- Home /
Best way to disable "Any State" transitions in the Animator after they've occurred?
Started playing with the Animator and found that transitions out of "Any State" often occur when I don't want them to (because the state I'm transitioning into also qualifies as "any state").
Found this post on the forums with an official reply.
http://forum.unity3d.com/threads/148665-Mecanim-quot-Any-State-quot
AnimatorStateInfo nextState = animator.GetNextAnimatorStateInfo(0) ; // get next state on layer 0
if( nextState != null && nextState.name == "Base Layer.DeathState")
{
animator.SetBool("DeahtBoolean", false);
}
In my opinion, this is kind of klunky. Has a better way emerged since this post from 2012? Preferably, there will be a way that can be done within Animator.
Ugh... and AnimatorStateInfo is (now?) a non-nullable value type. So, the code from this older Unity reply won't work as-is. Still tinkering...
Answer by s_guy · Nov 18, 2013 at 10:07 PM
Ok, the code posted by the Unity dev, that I reposted, is all kinds of broken / stale.
What I did was add an animation event on the first frame of the animation for the new state.
http://docs.unity3d.com/Documentation/Components/animeditor-AnimationEvents.html
That event calls a function on that Animator's object that makes the transition condition from AnyState untrue.
This is still kind of roundabout, but at least it works and seems relatively clean. Please post if you know of a better way.
Update: I stumbled upon the (apparently undocumented) Animator Parameter type "Trigger", which seems to be a bool that sets itself false as soon as the transition occurs. This is the answer I was looking for.
Answer by Antares · Jan 10, 2014 at 06:12 PM
What I found out that I could use for my purposes was to directly play that animation instead of turning a bool true.
http://docs.unity3d.com/Documentation/ScriptReference/Animator.Play.html
So you should change "animator.SetBool("DeahtBoolean", true);" To
animator.Play("DeahtAnimationStateName");
So you just dont use the "Any State" and does the same job.
Answer by savagent · Feb 02, 2014 at 09:39 AM
You can now (Unity 4) use triggers to handle this sort of thing. A trigger acts similar to a boolean parameter except it is consumed by the transition (i.e. automatically set back to false).
Your answer
Follow this Question
Related Questions
Animator not switching states properly 3 Answers
Smooth transition with Animator.Play or similar? 2 Answers
Complex condition of animator transition via script 2 Answers
2D animations transitioning too quickly and looping before finishing 2 Answers
2D animation transitions turn all components visible 2 Answers