速度,正确的方法吗?

时间:2013-09-06 09:52:40

标签: c# mono unity3d

基本上,我已经尝试将速度编码到我的游戏中,这有点像。 deaccelaration工作,但不仅正确。

我的问题是,我的速度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;
}

我几乎要问的是,有没有不同的方法来处理速度,还是我的问题得到解决?

1 个答案:

答案 0 :(得分:2)

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

修改

像这样的东西

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

其中TOLERATED_VELOCITY是一个常量,指定要考虑的速度值为零。