速度,正确的方法

本文关键字:方法 速度 | 更新日期: 2023-09-27 18:30:20

基本上,我尝试将速度编码到我的游戏中,这有点效果。解行有效,但不仅仅是正确的。

我的问题是,我的速度 z 和 x 无法达到 0,因为它只是在正值和负值之间战斗,根据我的代码。

但是我看不到任何其他方法,可以阻止这种情况发生,并正确减少到0。

我的代码:

if((!cc.isGrounded)) {
    velocity.y -= gravity;
}
if((velocity.z != 0)) {
    velocity.z = Mathf.Lerp(velocity.z, 0, deaccelerationSpeed);
}
if((velocity.x != 0)) {
    velocity.x = Mathf.Lerp(velocity.x, 0, deaccelerationSpeed);
}
if(isRightDown) {
    velocity.x = sidewayMovementSpeed;  
} else if(isLeftDown) {
    velocity.x = -sidewayMovementSpeed; 
}
if(isForwardDown) {
    velocity.z = forwardMovementSpeed;  
} else if(isBackDown) {
    velocity.z = -backwardMovementSpeed;
}

几乎在问,是否有任何不同的方法来处理速度,或者是否有解决我的问题的方法?

速度,正确的方法

您可以实现一些逻辑,将速度的小值视为 0,这样它就不会在正值和负值之间振荡。

编辑:

像这样的东西

if(Math.Abs(velocity.x) > TOLERATED_VELOCITY)
{
    velocity.x = Mathf.Lerp(velocity.x, 0, deaccelerationSpeed);
}
else
{
    velocity.x = 0;
}

其中TOLERATED_VELOCITY是一个常量,指定将哪些速度值视为零。