Документация в https://docs.unity3d.com/ScriptReference/MonoBehaviour.StartCoroutine.html, кажется, содержит пример, почти идентичный тому, что вы пытаетесь сделать:
IEnumerator Start()
{
// - After 0 seconds, prints "Starting 0.0"
// - After 2 seconds, prints "WaitAndPrint 2.0"
// - After 2 seconds, prints "Done 2.0"
print("Starting " + Time.time);
// Start function WaitAndPrint as a coroutine. And wait until it is completed.
// the same as yield WaitAndPrint(2.0);
yield return StartCoroutine(WaitAndPrint(2.0F));
print("Done " + Time.time);
}
// suspend execution for waitTime seconds
IEnumerator WaitAndPrint(float waitTime)
{
yield return new WaitForSeconds(waitTime);
print("WaitAndPrint " + Time.time);
}
Ключевым моментом является то, что их подпрограмма Start
возвращает IEnumerator и затем использует yield return StartCoroutine(WaitAndPrint(2.0F));
, чтобы заставить его ждать этого метода, прежде чем продолжить.
Таким образом, эквивалент для вас будет:
IEnumerator Generate()
{
yield return StartCoroutine(FallDelayCoroutine());
print("time3- " + Time.time);
}