作用:分出一个指令,在任意时间执行。(实现了在一个线程里任意跳跃执行到某处,再返回继续执行下一步)
协程概念理解
-与方法一样,协程也是一种程序组件。
-相对一般方法而言,协程更为灵活,方法只有一个入口,而协程可以有多个入口和出口点,可以用协程来实现任何的方法。
-协程更适合于用来实现如合作式多任务,迭代器,无限列表。
-开始一个协程时,执行从被调用方法的起始处开始;然而,接下来的每次协程被调用时,从协程返回(yield return )的位置接着执行。
-协程是单线程的。
代码使用案例↓(WaitForSeconds等待几秒)
private IEnumerator Start()
{
yield return new WaitForSeconds(1);
print("第一次输出");
yield return new WaitForSeconds(2);
print("第二次输出");
yield return new WaitForSeconds(3);
print("第三次输出");
}
Unity 中协程实现:
–IEnumerator 接口提供迭代
–yield return xxxx 指定下一次迭代入口
• WaitForFixedUpdate 在FixedUpdate后执行–适合于物理控制,
• null 、0、WaitForSeconds在每帧Update后执行–适合于分多帧完成一个任务,如A*路径计算
• WaitForEndOfFrame 在每帧结束后执行–适合于每帧末尾执行的操作,如相机的控制
• WWW 在请求结束后执行–适合于网络下载数据。
–StartCoroutine 开启协程
协程的停止:
•StopCoroutine(“ 协程方法名”)
–只能停止以StartCoroutine(“协程方法名”)开启的协程
• StopAllCoroutine()
–停止本对象中开启的所有协程
简单的代码操作↓
开启协程 3秒执行
private IEnumerator TimeFun(float timeCount)
{
yeib return new WaitForSeconds(timeCount);
print(timeCount+"秒时间到");
}
private void OnGUI()
{
if(GUILayout.Button("开始计时"))
StartCoroutine(TimeFun(3));
}
计时器 倒计时3秒
Void Start
{
StartCoroutine(TimeFunc(3));
}
private IEnumerator TimeFunc(float timeCount)
{
do
{
print(timeCount);
yield return new WaitForSeconds(1);
timeCount-=1;
}
while(timeCount>0);
print("时间到");
}
如果你想让多个脚本访问一个协程,可以定义静态的协程。
敌人寻路功能时 可用协程嵌套来实现寻路停顿。
12435.
12453.
开启协程前+yield return会先执行完,协程在往下进行。