我有以下简单的场景:在(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的工作方式,但我在文档中找不到任何关于它的信息。
5条答案
按热度按时间ct3nt3jp1#
你必须将角色控制器的最小移动距离设置为'0'(零),否则你将总是得到这种行为,它试图限制它检查是否接地的次数,但在一天结束时,玩家并不在乎,他们会捣碎跳转按钮并称之为错误
2w3rbyxf2#
有同样的问题
只是有一些重力时,字符控制器接地
更换
verticalVelocity = 0;
通过
verticalVelocity = -gravity * Time.deltaTime;
h9a6wy2h3#
在角色控制器检查器中将“最小移动距离”设置为0为我解决了一个非常类似的问题。
jv4diomz4#
Strubble是对的,即使角色是接地的,你也要加一些小重力。
qnzebej05#
我只是使用Vector3.down的Raycast,因为我已经厌倦了修复它,即使在原型设计中使用它也非常不可靠。