unity3d 我的角色在Unity中艰难地走上楼梯

omjgkv6w  于 2022-11-16  发布在  其他
关注(0)|答案(1)|浏览(156)

我没有使用CharacterController,因为它不能给予我完全控制它的物理。我用AddForce方法移动我的角色。我在游戏中有一个楼梯,它有一个启用了convex的网格碰撞器。所以,碰撞器看起来像一个斜坡,但我的角色很难走上它,如果我在楼梯中间停止移动,角色开始向下滑动。这是我移动角色的方式:

float horizontal;
float vertical;

void Update(){
    horizontal = Input.GetAxisRaw("Horizontal");
    vertical = Input.GetAxisRaw("Vertical");
    MovePlayer();
}

private void MovePlayer()
{
    moveDirection = playerrb.transform.forward * vertical + playerrb.transform.right * horizontal;
    if(isGrounded){
        playerrb.AddForce(moveDirection.normalized * moveSpeed * 10f, ForceMode.Force);
    }else{
        playerrb.AddForce(moveDirection.normalized * moveSpeed * 10f * 0.2f, ForceMode.Force);
    }
}
brccelvz

brccelvz1#

滑行是比较容易修复的,所以我就从这个开始。当你被认为是接地的时候,你可以简单地为你的球员禁用重力。

if(isGrounded){
  playerrb.useGravity = false;
  playerrb.AddForce(moveDirection.normalized * moveSpeed * 10f, ForceMode.Force);
}else{
  playerrb.useGravity = true;
  playerrb.AddForce(moveDirection.normalized * moveSpeed * 10f * 0.2f, ForceMode.Force);
}

有时这也足以允许在更陡的斜坡上攀登,如您的楼梯(最大60°应该是可能的),但如果这还不够,您需要使用表面的法线将力的方向调整为与地面平行。

Vector3 newForceDirection = Vector3.Cross(Vector3.Cross(surfaceNormal, moveDirection), surfaceNormal);

注意叉积必须按照这个顺序否则你会得到一个向后移动的向量.
获得正常的确切方法取决于你的游戏。

相关问题