Unity的C#脚本中的爬梯功能不允许角色从梯子上下来。

问题描述 投票:0回答:1

我在Unity中创建了一个函数,它应该允许角色攀爬。它产生了两个问题,首先它以某种方式与一般的移动函数交互。当角色开始跑动时,即使玩家没有移动他们,他们的动画也不会停止。其次,角色可以爬上爬下的梯子,但不会从梯子上下来,尽管技术上的逻辑是这样构建的,他们应该回到他们的正常状态。

我已经尝试过关闭Update()函数中的攀爬函数,所以我知道运行问题是由它引起的,因为没有它就能正常工作。

private void Climb()
    {
        RaycastHit2D ladder = Physics2D.Raycast(transform.position, Vector2.up, 5, whatIsLadder);

        float hDirection = Input.GetAxisRaw("Horizontal");
        float vDirection = Input.GetAxisRaw("Vertical");

        if (ladder.collider != null)
        {
            if (vDirection > 0.1f)
            {
                isClimbing = true;
            }
        }
        else
        {
            if (hDirection > 0.1f)
            {
                isClimbing = false;
            }        
        }

        if (isClimbing == true && ladder.collider != null)
        {

            rb.gravityScale = 0;
            rb.velocity = new Vector2(rb.velocity.x, climbSpeed * vDirection);
            if (Mathf.Abs(vDirection) > 0.1f)
            {
                anim.speed = 1f;
            }
            else
            {
                anim.speed = 0f;
            }

        }
        else
        {
                rb.gravityScale = naturalGravity;
        }

    }

我还会给出整个PlayerController脚本的链接,因为这可能会帮助一些人。https:/github.comPacal2PlatformerbmasterAssetsScriptsPlayerController.cs。

c# unity3d
1个回答
0
投票

试着在刚体停止攀爬时重置他的速度,在函数的结尾处。

//....
{
rb.gravityScale = naturalGravity;
}

进入:

{
rb.gravityScale = naturalGravity;
rb.velocity = new Vector2(0.0f, 0.0f);
}

这段代码看起来也很可疑

    if (ladder.collider != null)
    {
        if (vDirection > 0.1f)
        {
            isClimbing = true;
        }
    }
    else
    {
        if (hDirection > 0.1f)
        {
            isClimbing = false;
        }        
    }

改为:

    if (ladder.collider != null)
    {
        if (vDirection > 0.1f || vDirection < -0.1f) //if allowed to climb down
        {
            isClimbing = true;
        }

        if (hDirection > 0.1f || hDirection < -0.1f) //moving left
        {
            isClimbing = false;
        }        
    }

试试动画的速度。

anim.speed = rb.velocity.x;
© www.soinside.com 2019 - 2024. All rights reserved.