'Unity - Can't create multiple objects with a delay between creation
I'm trying to make the coroutine spawn one object at a time every 0.2 seconds, but when I run the coroutine, it spawns multiple objects at once without any delay. How can I fix this and achieve the desired result?
My code:
if (shotExtender > 0)
{
StartCoroutine("Timer");
}
else
{
StopCoroutine("Timer");
}
Coroutine
IEnumerator Timer()
{
while (objCounter < 3)//it should spawn only 3 objects
{
yield return new WaitForSeconds(0.2f);
GameObject bullet = PhotonNetwork.Instantiate(bulletPref.name, bulletPosition, Quaternion.identity);
objCounter++;
Debug.Log("objCounter: " + objCounter + " maxBullets: "+maxBullets);
}
objCounter = 0;
shotExtender = 0;//This stops the coroutine
}
Solution 1:[1]
Try taking out the object counter resetter and the shot extender resetter outside the coroutine. I believe that the if statement is being accessed multiple times generating multiple coroutines before the first one has even finished!
if (shotExtender > 0)
{
StartCoroutine("Timer");
objCounter = 0;
shotExtender = 0;//This stops the coroutine
}
Solution 2:[2]
If this code runs inside the update
if (shotExtender > 0)
{
StartCoroutine("Timer");
}
else
{
StopCoroutine("Timer");
}
You must finish the condition before starting the process like this
if (shotExtender > 0)
{
shotExtender = 0;
StartCoroutine("Timer");
}
else
{
StopCoroutine("Timer");
}
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 | gowl |
| Solution 2 | Lelouch kun |
