Why is this making an infinite loop?
Hello, I'm pretty sure this is making an infinte loop, but I can't find out why. Please, any help? :D
void DartSpawning ()
{
movingDart = Instantiate (dart, new Vector3 (xPosition, yPosition, -10f), Quaternion.Euler (90, 0, 0)) as GameObject;
while (movingDart.transform.position.z != 20.5f)
{
movingDart.transform.position = new Vector3 (movingDart.transform.position.x, movingDart.transform.position.y, movingDart.transform.position.z + dartSpeed);
}
}
Answer by Dave-Carlile · Dec 30, 2015 at 05:03 PM
In general, comparing floating point values for equality/inequality is not a good idea. Due to rounding and precision, how movement is scaled by Time.deltaTime, and many other reasons, chances are the value isn't going to exactly equal a constant.
There are various ways of dealing with this. You can use the Mathf.Approximately function to see if a value is really close to your constant. This works well when you're dealing specifically with rounding issues.
In your case you're constantly increasing your z value, so rather than checking z = 20.5f
you can check for z >= 20.5f
since z will eventually be greater than 20.5 if not exactly 20.5. In this case you often want to force the final value back to the maximum value you want it to be.
Finally, as @jmonasterio pointed out, this sort of code should either be in Update where you execute one update per frame. Or you could put it in a Coroutine and yield during each iteration.
Answer by jmonasterio · Dec 30, 2015 at 04:46 PM
To start with, your lines 5-8 should probably be in an Update() function. You'll want to get rid of the while loop, too. And just update the position on each frame, when Update() is called.
As for why it's an infinite loop? Maybe dartSpeed is 0?
Your answer
Follow this Question
Related Questions
Potential infinite while loop? 1 Answer
Raycast.distance not working in a while loop 0 Answers
How can I make an endless zoom with endless objects appearing and an endless environment? 1 Answer
So this code is crashing Unity only sometimes... 1 Answer
How do i fix this infinite while loop? 0 Answers