- Home /
              This post has been wikified, any user with enough reputation can edit it. 
            
 
             
               Question by 
               MetalLord · Apr 04, 2012 at 10:12 PM · 
                instantiatecoroutineyield  
              
 
              Coroutines insider another coroutine.
I'm trying to make a system that instantiate prefabs based on time,i need a way to make booth automatic and by code instantiating.
 Example  :
 game start
 reach 10 seconds
 from 10 to 20 seconds of play,instantiate a object every second (11,12,13,etc)
 from 20 t0 30 seconds of play,instantiate a object every 0.4 seconds and another object every 0.7 seconds.
 from 30 to 40,instead of automatic system,manually set via code the instantiations.
 if time > 34
 instantiate once
 yeld.
 if time > 36.4
 instantiate once
 yeld.
etc.
What i did so far :
 IEnumerator Example() {
      while (Time.timeSinceLevelLoad >5.0 && (Time.timeSinceLevelLoad <10.0)) {
         
         InvokeRepeating("aa", 0, 1.0F);
         
     
     }
     
         while (Time.timeSinceLevelLoad >10.0 && (Time.timeSinceLevelLoad <23.0)) {
         
         InvokeRepeating("bb", 0, 1.0F);
         
     
     }
     
     
     
     
     if (Time.timeSinceLevelLoad >24.0){
     //stuff once
     //yeld;
     
     
     }
     
     
     
         if (Time.timeSinceLevelLoad >26.4){
     //stuff once
     //yeld;
     
     
     }
     
     
     
     }
     
     
     
     
     
     void aa (){
     // stuff
     }
     
     
         void bb (){
     // other kind of stuff
     }
     
     }
               Comment
              
 
               
              Answer by simonmc · Apr 05, 2012 at 01:41 AM
Something like this would accomplish what I think you want to do. The code in Awake sets up the scenario you described
 using UnityEngine;
 
 public class TimedInstantiater : MonoBehaviour {
     
     public GameObject[] prefabs
 
     public IEnumerator InstantiateRepeating(GameObject prefab, float delay, float difference, float length) {
         yield return new WaitForSeconds(delay);
         float startTime = Time.time;
         while(Time.time - startTime < length) {
             Instantiate(prefab);
             yield return new WaitForSeconds(difference);
         }
         return true;
     }
 
     public IEnumerator InstantiateOnce(GameObject prefab, float delay) {
         yield return new WaitForSeconds(delay);
         Instantiate(prefab);
         return true;
     }
 
     public void Awake() {
         StartCoroutine(InstantiateRepeating(prefabs[0], 10f, 1f, 10f));
         StartCoroutine(InstantiateRepeating(prefabs[1], 20f, 0.7f, 10f));
         StartCoroutine(InstantiateRepeating(prefabs[2], 20f, 0.4f, 10f));
         StartCoroutine(InstantiateOnce(prefabs[3], 34f);
         StartCoroutine(InstantiateOnce(prefabs[4], 36.4f);
     }
 }
Your answer
 
 
             Follow this Question
Related Questions
Respawn after delay 3 Answers
How to make a loading feedback for big GameObjects loading? 2 Answers
Respawn after delay 3 Answers
 koobas.hobune.stream
koobas.hobune.stream 
                       
                
                       
			     
			 
                