繁体   English   中英

二维跳跃 Animation 陷入循环

[英]2D Jumping Animation stuck on loop

我已将跳跃 animation 添加到我的播放器。 当我的播放器跳跃时,animation 开始播放。 然而,当玩家着陆时,跳跃 animation 就会卡住。 当我检查动画师选项卡时,跳跃 animation 正在循环播放。

这是跳跃的代码——动画/实际运动:

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

此声明与您认为的不同

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

GetButtonUp在释放按钮的第一帧返回 true(请参阅文档)。 但如果按钮已被释放,它将再次返回false 这在文档中没有说清楚。 或者换句话说: GetButtonUp在按钮已被释放但在按钮仍被按下之前的帧中返回true

您可以只检测玩家着陆切换动画的时刻:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM