- Home /
Character still walking when no key is already pressed
I have the following animation controller:
As you can see, there are 4 different walking animations and 4 corresponding idle animations.
There are also transition conditions between them:
any state -> walkdown -- DirY < -0.1
any state -> walkleft -- DirX < -0.1
any state -> walkright -- DirX > 0.1
any state -> walkup -- DirY > 0.1
walkdown -> idledown -- DirY < 0.1 && DirY > -0.1
walkleft -> idleleft -- DirX > -0.1 && DirX < 0.1
walkright -> idleright -- DirX < 0.1
walkup -> idleup -- DirY < 0.1
I also wrote the following code for the character animation:
void FixedUpdate() {
float xAxis = Input.GetAxisRaw("Horizontal");
float yAxis = Input.GetAxisRaw("Vertical");
GetComponent<Rigidbody2D>().velocity = new Vector2(xAxis, yAxis) * Speed;
GetComponent<Animator>().SetFloat("DirX", xAxis);
GetComponent<Animator>().SetFloat("DirY", yAxis);
}
It works but I have the following questions:
Is it the appropriate way to make transitions between such states? I mean,
DirY < 0.1 && DirY > -0.1
andDirX > -0.1 && DirX < 0.1
looks quite rude but hey, is it ok?I noticed that sometimes the character still walking when no key is already pressed. I think that's because of the
FixedUpdate
method nature -- it is called every n milliseconds. Am I right? Is there any workaround to change animation immediately? I already unchecked theHas Exit Time
checkbox in Inspector.
To make it exit immediately uncheck at the Connection arrow the box Has Exit Time For your other Problem i unfortunately can't help you but i did the same.
Answer by TheXWolf · Dec 06, 2016 at 01:04 AM
Movement really makes more sense inside Update(), FixedUpdate() is best saved for physics, though it's timing has nothing to do with it. Also you'll probably want to try transform.Translate and doing * Time.DeltaTime or Time.SmoothDeltaTime.
As for the character still moving, consider having the idle states as the defaults then moving into the moving anim by the Speed variable without an exit time, then back to idle when the speed paramater changes. If you want the anim to stop immediately as well you'll need to untick the Has Exit Time for those as well.
Your answer
Follow this Question
Related Questions
Rotating my character only while moving in a 2D plane 3 Answers
Rotation used as movement 4 Answers