【发布时间】:2015-09-20 04:32:30
【问题描述】:
using UnityEngine;
using System.Collections;
public class CoroutineExample : MonoBehaviour
{
IEnumerator Start ()
{
print ("Starting " + Time.time);
yield return StartCoroutine (WaitAndPrint ());
print ("Done " + Time.time);
}
IEnumerator WaitAndPrint ()
{
yield return new WaitForSeconds (5f);
print ("WaitAndPrint " + Time.time);
}
}
结果是
Starting 0
WaitAndPrint 5.010554
Done 5.010554
我有两个问题?
首先,如何理解函数Start()的返回值。我曾经看到 Start() 的返回值是 void。在我看来,Start() 只执行一次(一帧)Unity,但 yield return 似乎使 Start() 函数在两帧内执行;
其次,我也对结果感到困惑。我认为结果应该是
Starting 0
Done 5.010554
WaitAndPrint 5.010554
因为 StartCoroutine() 启动了 WaitAndPrint() 函数。在函数 WaitAndPrint() 中,yield return 使该函数在此帧中暂停并返回到 Start()。然后 Start() 继续进行并打印“Done xxxxx”。 5 秒后,WaitAndPrint() 恢复并 打印“WaitAndPrint xxxxx”。
我哪里错了?
【问题讨论】: