CharacterController 中的 IsGrounded 不稳定

Joh*_*cid 8 unity-game-engine

我有以下简单场景:地板的 (0, 0, 0) 处的缩放框和 (0, 2, 0) 处的 1 个尺寸框。我尝试做简单的重力并使用以下代码:

private float gravity = 1.0f;
private Vector3 moveVector;

void Update()
{
    if (characterController.IsGrounded)
    {
        Debug.Log("is grounded");
        verticalVelocity = 0;
    }
    else
    {
        Debug.Log("not grounded");
        verticalVelocity -= gravity;
    }

    Debug.Log("vertical velocity:" + verticalVelocity);

    moveVector.x = 0;
    moveVector.y = verticalVelocity;
    moveVector.z = 0;

    characterController.Move(moveVector * Time.deltaTime);
}
Run Code Online (Sandbox Code Playgroud)

我在日志中看到,当物体位于地板上时,我有接地/不接地消息。视觉上物体在地板上并且不振动。当物体放在地板上时,为什么我没有持续的“接地”?也许这就是 CharacterController 的工作原理,但我在文档中找不到任何有关它的信息。

小智 7

您必须将角色控制器最小移动距离设置为“0”(零),否则您将始终出现此行为,它会尝试限制检查是否接地的次数,但最终玩家不会这样做小心,他们会按下跳跃按钮并称其为越野车


小智 4

有同样的问题

当角色控制器接地时,只有一些重力

代替verticalVelocity = 0;

经过 verticalVelocity = -gravity * Time.deltaTime;