- Home /
Rigidbody velocity randomly returning zero? [Possible unity bug]
Hi,
I have searched around for the answer to this -- seems like a few others may have had a similar problem in the past but never was there a fix or an answer mentioned online, so I want to know what everyone else thinks.
I'm trying to get an animation to run smoothly, but it keeps transitioning back to idle because I'm using the rigidbody x velocity as a marker for horizontal movement. As you can see in my gif, even though I'm holding down the move key, and the character moves, the console shows velocity is zero at seemingly constant intervals.
The only way I've been able to get it to go away is to remove the Z-axis rotation freeze until my character falls over, then it seems to go away. No idea how to debug this.
Thanks!
void Update()
{
//Only process input from local player
if (!isLocalPlayer)
{
return;
}
if (Input.GetKeyDown(KeyCode.D) && !isFacingRight)
{
isFacingRight = true;
//CmdFlipSprite(isFacingRight);
}
if (Input.GetKeyDown(KeyCode.A) && isFacingRight)
{
isFacingRight = false;
//CmdFlipSprite(isFacingRight);
}
if (Input.GetKeyDown(KeyCode.Space) && IsGrounded()) //&& IsGrounded()
{
CmdJump();
}
}
//FixedUpdate (called once at the end of each frame)
void FixedUpdate () {
if (!isLocalPlayer)
{
return;
}
moveListen();
animCheck();
climbListen();
//Camera follow script should stay in fixed update to negate choppiness.
cameraFollow();
}
[Command]
void CmdFlipSprite(bool flip)
{
//transform.localScale = new Vector2(transform.localScale.x * -1, transform.localScale.y);
sr.flipX = flip;
}
void animCheck(){
if (rb.velocity.x != 0.0F) {
Debug.Log("Magnitude is (x) " + rb.velocity.x + "... setting to TRUE");
anim.SetBool ("isMoving", true);
} else if (rb.velocity.x == 0){
anim.SetBool ("isMoving", false);
Debug.Log("Magnitude is 0... setting to false: " + rb.velocity.x);
}
}
//Movement functions
void moveListen()
{
float velX = Input.GetAxis("Horizontal");
Vector2 movement = new Vector2(velX * characterSpeed, rb.velocity.y);
rb.velocity = movement;
}
Answer by nickostan · Aug 18, 2017 at 04:46 AM
Ugh, I figured it out right after posting this.
The problem was that I had my animcheck() and moveListen() functions separated between Update() and FixedUpdate(). To anyone in the future encountering this!