- Home /
Call a new IEnumerator
I guess it is simple but couldn't find it anywhere, I want to create an IEnumerator and while this one goes on, I want to create a new unique one that doing another job.
Let's say I created a bullet and bullet movement is handled by Coroutine. Coroutine goes around 5 seconds but by the way, I want to create other bullets but when I call the Coroutine, it uses the same one. I cannot use "new" keyword for IEnumerator types. I can call the coroutine inside each object but I want to call it from the main player. Is there any functionality for this? Here is a sample code that I just wrote here to explain better, my code is too long to give as a sample :
for (int i = 0; i < 5; i++)
{
StartCoroutine(fire()); // how should I create another unique coroutine
yield return new WaitForSeconds (0.2f);
}
IEnumerator fire()
{
float timer = 0;
while(timer<5)
{GameObject obj = Instantiate(bullet);
timer+=Time.deltaTime;
obj.transform.position+=new Vector3(1,0,0);
yield return new WaitForFixedUpdate();
}
}
Thanks
Answer by fafase · Apr 22, 2015 at 06:53 PM
for (int i = 0; i < 5; i++)
{
StartCoroutine(fire()); // how should I create another unique coroutine
yield return new WaitForSeconds (0.2f);
}
This is creating a new coroutine each round. StartCoroutine creates a new object of type coroutine that is assigned to the MonoBehaviour it was called with.
So as long as you ar enot using any global variables (and you do not seem to), each will be independent.
You are totally right, unlike the example I realised I have used a global timer. Thanks
Answer by Robotron18 · Apr 22, 2015 at 12:15 PM
Try to use InvokeRepeating instead coroutine. Besides call Invoke has better peformance then Coroutine.
http://docs.unity3d.com/ScriptReference/MonoBehaviour.InvokeRepeating.html
Thanks for your answer but InvokeRepeating is to call a function repeatingly but I want to use a coroutine for my planned act.