

You call SetTrigger(). The animation plays. Everything looks fine.
Then later, something strange happens. The animation fires again unexpectedly. Or it refuses to trigger at all. Or transitions get stuck even though you only triggered once.
This is one of the most common Animator problems: triggers not resetting the way you expect.
In Unity’s Animator, a Trigger is a special parameter type. When you call SetTrigger(), it becomes active. Once a transition that depends on that trigger is used, Unity automatically resets it.
That’s the theory.
In practice, triggers remain active if:
Example:
animator.SetTrigger("Attack");
If this is called twice in the same frame or before the previous transition completes, you may get unexpected repeated transitions.
Reset the trigger manually before setting it:
animator.ResetTrigger("Attack");
animator.SetTrigger("Attack");
This ensures no leftover trigger state exists.
If a transition has additional conditions, the trigger may remain active but never cause a transition.
Example:
If IsGrounded is false, the trigger stays set but does nothing.
Later, when IsGrounded becomes true, the animation may suddenly fire.
Either:
If you allow transitions to interrupt each other, triggers can pile up.
Check these settings in your transition:
Improper interruption settings can prevent proper trigger consumption.
If two different transitions use the same trigger from the same state, both may compete.
This creates unpredictable results.
Use separate triggers for different transitions.
Bad design:
Better design:
Triggers are convenient but not always predictable. In complex systems, a bool parameter is often safer.
Example:
animator.SetBool("IsAttacking", true);
Then reset it explicitly:
animator.SetBool("IsAttacking", false);
This gives you full control over state.
If you want safer trigger usage:
public void PlayAttack()
{
animator.ResetTrigger("Attack");
animator.SetTrigger("Attack");
}
This prevents stacked triggers.
Before setting a trigger, verify the current state:
AnimatorStateInfo stateInfo = animator.GetCurrentAnimatorStateInfo(0);
if (!stateInfo.IsName("Attack"))
{
animator.ResetTrigger("Attack");
animator.SetTrigger("Attack");
}
This prevents re-triggering while already in that animation.
Not exactly. Triggers behave as designed, but their internal consumption logic can create confusing side effects in complex state machines.
Most trigger problems are design issues rather than engine bugs.
Animator triggers are powerful but easy to misuse. When animations fire unexpectedly or fail to play, the root cause is usually a trigger that was never properly consumed or cleared.
Once you manage triggers deliberately instead of relying on automatic reset behavior, the system becomes predictable and stable.