Trigger to reverse current animation state
So, I have a "Door opening" animation. I want trigger A to activate "open door" animation with speed of 1.0f.
When trigger B occurs, it should reverse the same exact "open door" animation with speed of -2.0f.
The player can then run trigger A (even before "open door" animation reaches the beginning) to redo the whole sequence.
I tried to basically have one state with initial speed multiplier of 0 where I can write animator.setFloat("speed", 1.0);
for opening and setting -2.0f for reversing. The problem with it was that the speed multiplier was shooting through and going below 0, so when the user wanted to open the door again, it would have to wait to get the speed multiplier back to 0, and then moving with the animation.
How can I do such a simple thing?
Answer by _AB · Oct 16, 2017 at 02:39 PM
Alright, so here's how I solved it. I don't think this is the "Unity-intended" way but I think my method is clean enough.
The screenshot shows an:
"Idle" state where nothing happens
"Open" state where basically the default door opening animation occurs
Second screenshot shows a speed
parameter that controls the speed multiplier. This will basically reverse the door opening animation when animator.setFloat("speed", -1.0f)
is set.
Now for the transitions:
Idle -> Open
transition will trigger whenspeed
parameter is > 0.0f. It hasHas Exit Time
turned off.Open -> Idle
transition will trigger whenspeed
parameter is < 0.0f. It hasHas Exit Time
turned off.
This piece of code handles setting the speed
parameter:
public void toggleAnim(bool b)
{
if (b)
{
animator.SetFloat("speed", 1.0f);
}
else
{
animator.SetFloat("speed", -2.0f);
}
}
Basically, the flow goes as follows: Idle
state is the default state. When the speed
parameter is set to 1.0f, the animation would transition to Open
state. This can be interrupted at anytime during the animation. When the user "fails" to open the door, I'll set speed
parameter to -1.0f or anything negative to reverse AND break out of the Open
state back to Idle
.