协程在Unity中的含义:在主进程中开启另外一段业务逻辑,来协同当前程序的执行
协程在Unity中的方法:
StartCoroutine | Starts a coroutine. |
StopAllCoroutines | Stops all coroutines running on this behaviour. |
StopCoroutine | Stops all coroutines named methodName running on this behaviour. |
协程是在主线程中执行的,这一点与多线程不同,在Unity中,我们通过StartCoroutine来开启一段协程,其形式有以下两种:
StartCoroutine(MyCorutine());
或者
StartCoroutine(“MyCorutine”);
注意:
1、当你想停止MonoBehaviour对象中的某个协程时,开启与停止协程需要使用相同的形式,不可混合使用.。
2、StartCoroutine是MonoBehaviour的一种方法,该方法可以启动一个协程,协程必须是一个IEnumerator作为返回值的方法。
3、协程不是线程,也不是异步。协程是和MonoBehaviour的其他更新函数一样,都是在MainThread中执行的。
using System.Collections;
using UnityEngine;
public class Test_Coroutine : MonoBehaviour {
// Use this for initialization
void Start()
{
StartCoroutine(MyCoroutine()); //开启协程
StopCoroutine(MyCoroutine()); //关闭协程
}
IEnumerator MyCoroutine() //协程的入口函数
{
Debug.Log("协程被执行");
yield return null;
}
}
yield 的挂起指令类型:
null | 协程将在下一帧所有脚本的Update执行之后,再继续执行. |
WaitForSecond | 协程在延迟指定时间,且当前帧所有脚本的Update全都执行结束后才继续执行. |
WaitForFixedUpdate | 协程在所有脚本的FixedUpdate执行之后,再继续执行. |
WWW | 协程在WWW下载资源完成后,再继续执行. |
StartCoroutine | 协程在指定协程执行结束后,再继续执行. |
WaitForSecondsRealtime | 与WaitForSeconds类似,但不受时间缩放影响. |
WaitWhile | 当返回条件为假时才执行后续步骤. |
WaitForEndOfFrame | 在所有渲染和GUI完成之后,协程在框架上执行. |