|
I want my character to boost and stop slowly. So I enter a 'while' loop, and set it to keep going until the force with which he's propelled forward is 0, and lessen the force at the end of the loop. So I'd think he's goes forward a little less every frame, and creates the effect of a slow stop, but instead it's all one very quick, abrupt movement. (I already asked this but I got no answer.
public int boosts = 3;
int boostCount = 0;
public float boostSpeed = 15.0f;
CharacterController cont;
void Start ()
{
cont = GetComponent ();
}
void Update ()
{
if (Input.GetButtonDown ("Boost") && boostcount < boosts) {
Vector3 force = transform.TransformDirection (0, 0, 1) * boostSpeed * Time.deltaTime;
while (force.z > 0) {
cont.Move (force);
force.z -= (2.0f * Time.deltaTime);
}
boostcount ++;
}
(comments are locked)
|
|
I believe the problem is that the "while" loop is inside the "if" statement, and it all happens in Update. Input.GetButtonDown only triggers on the frame the button is depressed so the while loop only runs for that single frame, before the next update restarts everything (this time with no button down being registered). My favourite fix is to make this a coroutine... Actually, the problem is caused by the while being executed entirely inside a single frame. The coroutine solution is the best: use yield to span the while over several frames.
Aug 05 '12 at 12:03 AM
aldonaletto
(comments are locked)
|
