unity3d IsGrounded in CharacterController不稳定

o4hqfura  于 2023-03-23  发布在  其他
关注(0)|答案(5)|浏览(213)

我有以下简单的场景:在(0,0,0)的地板和1大小的方块(0,2,0)。我尝试做简单的重力和使用以下代码:

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

我在日志中看到,当对象在地板上时,我有接地/未接地消息。视觉上对象在地板上,而不是振荡。为什么当对象在地板上时,我没有常量“is grounded”?也许这是CharacterController的工作方式,但我在文档中找不到任何关于它的信息。

ct3nt3jp

ct3nt3jp1#

你必须将角色控制器的最小移动距离设置为'0'(零),否则你将总是得到这种行为,它试图限制它检查是否接地的次数,但在一天结束时,玩家并不在乎,他们会捣碎跳转按钮并称之为错误

2w3rbyxf

2w3rbyxf2#

有同样的问题
只是有一些重力时,字符控制器接地
更换verticalVelocity = 0;
通过verticalVelocity = -gravity * Time.deltaTime;

h9a6wy2h

h9a6wy2h3#

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

jv4diomz

jv4diomz4#

Strubble是对的,即使角色是接地的,你也要加一些小重力。

if (characterController.IsGrounded)
{
    // Press the character down to the floor to avoid jitter "true-false"
    // of the isGrounded property.
    // To do it, add some small gravity (or velocity in your terms).
    verticalVelocity = -gravity * 0.1f;
}
qnzebej0

qnzebej05#

我只是使用Vector3.down的Raycast,因为我已经厌倦了修复它,即使在原型设计中使用它也非常不可靠。

相关问题