unity3d 2D跳跃动画卡在循环上

lb3vh1jj  于 2023-02-05  发布在  其他
关注(0)|答案(1)|浏览(188)

我已经将跳跃动画添加到我的播放器中。当我的播放器跳跃时,动画播放。但是当播放器着陆时,跳跃动画卡住了。当我检查动画选项卡时,跳跃动画只是循环播放。
这是代码的跳跃的东西-动画/实际运动:

void Update()
    {
        horizontal = Input.GetAxisRaw("Horizontal");

        animator.SetFloat("Speed", Mathf.Abs(horizontal));

        if (Input.GetButtonDown("Jump") && IsGrounded())
        {
            rb.velocity = new Vector2(rb.velocity.x, jumpingPower);
            jump = true;
            animator.SetBool("isJumping", true);
        }

        if (Input.GetButtonUp("Jump") && rb.velocity.y > 0f)
        {
            rb.velocity = new Vector2(rb.velocity.x, rb.velocity.y * 0.5f);
        }

        if (Input.GetButtonUp("Jump") && IsGrounded())
        {
            animator.SetBool("isJumping", false);
            animator.SetBool("isGrounded", true);
            jump = false;
        }

        Flip();
    }

这将检查播放器是否接地:

private bool IsGrounded()
    {
        return Physics2D.OverlapCircle(groundCheck.position, 0.2f, groundLayer);
    }
gywdnpxw

gywdnpxw1#

这句话不是你所想的那样

if (Input.GetButtonUp("Jump") && IsGrounded())

GetButtonUp在按钮被释放的第一帧返回true(参见docs)。但是如果按钮已经被释放,它将再次返回false。这在文档中没有明确说明。或者换句话说:GetButtonUp在按钮已被释放的帧中返回true,但在按钮仍被按下之前的帧中返回true
你可以检测到玩家落地的瞬间来切换动画:

if (jump && IsGrounded()) {  // player just landed
     animator.SetBool("isJumping", false);
     animator.SetBool("isGrounded", true);
     jump = false;
}

相关问题