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!

alt text

 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;
    }

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!