- 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
![](https://koobas.hobune.stream/wayback/20220613065921im_/https://answers.unity.com/themes/thub/images/avi.jpg)
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