While loop freezes game for 3 seconds then unfreezes (not infinite loop!) c#

Hi guys,

I have a function which contains purely a while loop however when the while loop is active the game freezes, then when the timer breaks the while loop as expected the game unfreezes and all movement options inside the while loop are inaccessible.

void keepVelocityTest(bool keepVelocityForWhile) {
		print ("Reach Here");
		Debug.Log (keepVelocityForWhile);
		while (keepVelocityForWhile)
		{
			print ("whileLoop");
			keepVelocityTimer += Time.deltaTime;
			if (Input.GetKey(KeyCode.A))
			{
				print ("shouldwork??");
				VelocityX = Mathf.SmoothDamp(VelocityX, (VelocityX > targetVelocityWalking)? VelocityX: -targetVelocityWalking, ref smoothTime, friction);
			}
			else if (Input.GetKey(KeyCode.D))
			{
				VelocityX = VelocityX;
			}

			if (keepVelocityTimer > 3)
			{
				keepVelocityForWhile = false;
				keepVelocityTimer = 0;
			}

		}
	}

As you can see I am printing/debugging to find out where the error is.

All the prints/debugs work however there is no movement and the game freezes.

Does anyone have any idea what could be the cause to this?

Thanks in advance,
Matt

This whole while loop is executed in one single frame, so it ‘holds’ the frame for 3 seconds(not exactly since deltatime isn’t updated).
Look up coroutines, that’s what you want to use here :slight_smile: