Unity 协程
Unity 协程
·
目录
1.定义
协程的本质是迭代器,unity协程是一个能够暂停协程执行,暂停后立即返回主函数,执行主函数剩余的部分,直到中断指令完成后,从中断指令的下一行继续执行协程剩余的函数。函数体全部执行完成,协程结束。由于中断指令的出现,使得可以将一个函数分割到多个帧里去执行。
使用场景:
- 延时调用某个函数
- 某块逻辑要一直循环判断执行
2.使用
引入命名空间
using System.Collections;
using UnityEngine;
开启协程:
// 形式一
StartCoroutine(CustomCorutine());
StartCoroutine(CustomCorutine("haha"));//向方法中传递参数
// 形式二
StartCoroutine(“CustomCorutine”);
StartCoroutine(“CustomCorutine”, "haha");//向方法中传递参数
终止协程:
在开发中可能会开启多个协程,如果你想停止其中某个协程,你可使用StopCoroutine,但在使用时,停止协程的方式要与开启协程的方法一致。
//方法一:用字符串代替函数名终止协程
StopCoroutine("Test");
//方法二:以协程的函数名为参数终止该协程,
StopCoroutine(Test());
//方法三:开启协程时记录下来,以Coroutine为参数终止协程
mCoroutine= StartCoroutine(Test());
StopCoroutine(mCoroutine);
//终止所有协程
StopAllCoroutines();
协程中yield return(遇到此代码,协程会将cpu的控制权让出去,等待条件完成再向下执行):
Ⅰ 等待指定时间后执行
//在此等待1s后执行后面的代码
yield return new WaitForSeconds(1f);
Ⅱ 在FixedUpdate结束后再执行
//等到FixedUpdate结束后执行后面的代码
yield return new WaitForFixedUpdate();
Ⅲ 在每帧结束后执行下面的
//程序中该帧执行的事件都结束了,再执行后面的
yield return new WaitForEndOfFrame();
Ⅳ 在指定协程执行后执行下面的
IEnumerator WaitTest()
{
//等待某个协程执行完毕后再执行后续代码
yield return StartCoroutine(Test());
Debug.Log("Good!");
}
Ⅴ 下一帧再执行下面的代码
IEnumerator WaitTest()
{
//下一帧再执行下面的代码
yield return null;
Debug.Log("Good!");
//下一帧再执行下面的代码
yield return 0;//(这里可以填任意数字)
Debug.Log("haha!");
}
Ⅵ 直接结束该协程的接下来的操作
//直接结束该协程的后续操作
yield break;
3.优化
Unity内的协程,在yield return 时不要每次都new一个,可以在之前创建一个变量做为代替
//全局中断指令
WaitForSeconds waitForSeconds = new WaitForSeconds(5f);
void Start()
{
//开启协程
StartCoroutine(Test());
}
IEnumerator Test()
{
Debug.Log("开始");
yield return waitForSeconds;
Debug.Log("已经开始了 5s 了");
}
更多推荐
所有评论(0)