IsGrounded在CharacterController中不稳定

时间:2016-09-27 18:51:17

标签: unity3d

我有以下简单场景:地板的(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);
}

我在日志中看到当对象在地板上的事件时我有接地/不接地的消息。视觉对象在地板上而不是振荡。 为什么我不能保持稳定"接地"当物体在地板上? 也许是CharacterController的工作原理,但我在文档中找不到任何相关内容。

3 个答案:

答案 0 :(得分:1)

有同样的问题

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

替换verticalVelocity = 0;

通过    verticalVelocity = -gravity * Time.deltaTime;

答案 1 :(得分:1)

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

答案 2 :(得分:1)

在角色控制器检查器中将“最小移动距离”设置为0对我来说解决了一个非常相似的问题。