Unity协程
概念
协程就像一个函数,能够暂停执行并将控制权返还给 Unity,然后在下一帧继续执行。函数体全部执行完成,协程结束。或者在yield break;执行后结束协程。
开始协程
无参数
public class Test : MonoBehaviour
{
void Start()
{
StartCoroutine(SayHello()); // 开始一个协程
}
private IEnumerator SayHello() // 必须有返回值
{
yield return 0; // 当前帧结束执行,下一帧继续执行后面代码
Debug.Log("HelloWold");
}
}
带参数
public class Test : MonoBehaviour
{
void Start()
{
StartCoroutine(SayHello(10)); // 开始一个协程
}
private IEnumerator SayHello(int a) // 必须有返回值
{
a++;
yield return a > 100; // 当前帧结束执行,下一帧继续执行后面代码
Debug.Log(a); //打印 11
}
}
Start直接启动协程
private IEnumerator Start()
{
yield return new WaitForSeconds(10.0f); // 暂停十秒 继续执行。
Debug.Log("HelloWold");
}
协程返回值
- yield return null:下一帧再执行后续代码
- yield return 6:(任意数字) 下一帧再执行后续代码
- yield break:直接结束该协程的后续操作
- yield return asyncOperation:等异步操作结束后再执行后续代码
- yield return StartCoroution(/某个协程/):等待某个协程执行完毕后再执行后续代码
- yield return WWW():等待WWW操作完成后再执行后续代码
- yield return new WaitForEndOfFrame():等待帧结束,等待直到所有的摄像机和GUI被渲染完成后,在该帧显示在屏幕之前执行
- yield return new WaitForSeconds(0.3f):等待0.3秒,一段指定的时间延迟之后继续执行,在所有的Update函数完成调用的那一帧之后(这里的时间会受到Time.timeScale的影响);
- yield return new WaitForSecondsRealtime(0.3f):等待0.3秒,一段指定的时间延迟之后继续执行,在所有的Update函数完成调用的那一帧之后(这里的时间不受到Time.timeScale的影响);
- yield return WaitForFixedUpdate():等待下一次FixedUpdate开始时再执行后续代码
- yield return new WaitUntil():将协同执行直到 当输入的参数(或者委托)为true的时候....如:yield return new WaitUntil(() => frame >= 10);
- yield return new WaitWhile():将协同执行直到 当输入的参数(或者委托)为false的时候.... 如:yield return new WaitWhile(() => frame < 10);
结束协程
StopCoroutine : 结束单个协程
StopAllCoroutines : 结束所有协程
注意:
当用 SetActive(false) 禁用某个协程所附加到的游戏对象时,该协程也将停止。
调用 Destroy(example)(其中 example 是一个 MonoBehaviour 实例)会立即触发 OnDisable,并会处理协程,从而有效地停止协程。最后,在帧的末尾调用 OnDestroy。
通过在 MonoBehaviour 实例上将 enabled 设置为 false 来禁用 MonoBehaviour 时,协程不会停止。
更多阅读


浙公网安备 33010602011771号