2013-09-06 3 views
0

В основном, я пытался кодировать скорость в свою игру, которая работает. Разделение работает, но не совсем правильно.Скорость, правильный способ сделать это?

Моя проблема заключается в том, что для моей скорости 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; 
} 

То, что я довольно много спрашивает , есть ли другой способ обработки скорости, или есть проблема с моей проблемой?

ответ

2

Вы можете реализовать некоторую логику, которая будет обрабатывать малые значения скорости как 0, чтобы она не колебалась между положительными и отрицательными значениями.

EDIT:

Что-то вроде этого

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

TOLERATED_VELOCITY где есть константа, определяющая, какие значения скорости считать равным нулю.

+0

Это было бы просто временное решение, не очень эффективное. Я пробовал это, не очень эффективное решение. –

+0

Согласен, но образец кода улучшит ваш вопрос – Sayse

+0

Пример кода? Не то, что я предоставил достаточно? Как я уже объяснял в своем вопросе, я не мог понять, как это сделать. –

Смежные вопросы