While loop won't stop crashing!!!

I am trying to make a while loop. I’ve no idea why the condition won’t terminate.

Here’s my code:

public void Damaged (float _timer, Vector3 _direct) {
		Debug.Log (HitTimer);
		while (HitTimer < _timer) 
                  {
			transform.position += _direct * MovementSpeed * Time.deltaTime;
		      }

In this, HitTimer is increasing by Time.deltatime in the update function, being zeroed out before the start, (I’ve checked that), and _timer is .5f; I can’t think of why this isn’t ending. Any ideas?

Unity uses a single thread for the whole scripting environment and that’s the main thread. If you doing a while loop like this the current frame will be stuck inside that while loop. Since nothing else is executed besides what’s inside that while loop you will never exit the while loop because HitTimer nor _timer can’t possibly change.

You might want to create a coroutine for this. This allows you to write “sequential code” which can be interrupted at yield statements :

public IEnumerator Damaged (float _timer, Vector3 _direct)
{
    Debug.Log (HitTimer);
    while (HitTimer < _timer)
    {
        transform.position += _direct * MovementSpeed * Time.deltaTime;
        yield return null; // leave the coroutine and come back next frame
    }
}

To start a coroutine you have to use StartCoroutine. Instead of just calling the method you have to pass the result to StartCoroutine:

StartCoroutine(Damaged(yourTimerValue, yourDirectVector));