赞
踩
//协程函数的返回值 必须是 IEnumerator或者继承它的类型
IEnumerator MyCoroutine(int i,string str)
{
//协程函数中不能直接使用return进行返回,必须使用提供的语法糖 yield return 进行返回
//5秒后打印 str
yield return new WaitForSeconds(5f);
print(str);
}
//传入需要开启协程函数名
StartCoroutine("MyCoroutine");
//传入函数
StartCoroutine(MyCoroutine(1,"协程函数"));
IEnumerator ie = MyCoroutine(1, "123");
StartCoroutine(ie);
StopAllCoroutines();
Coroutine c1 = StartCoroutine(MyCoroutine(1, "123"));
StopAllCoroutines(c1);
不同的返回值在MonoBehaviour中的执行顺序
yield return 数字(等待多少帧就写多少);
yield return null(null 默认为等待一帧);
yield return new WaitForSeconds(秒);
yield return new WaitForFixedUpdate();
yield return new WaitForEndOfFrame();
yield break;
协程开启后,组件和物体销毁,协程不执行
物体失活协程不执行,组件失活协程执行
协程可以分为两个部分
协程本体是一个能够中间暂停返回的函数 yield return
协程调度器是Unity内部实现的,会在对应的时机帮助我们继续执行协程函数,根据我们协程函数的的返回值,Unity内部的协程调度来觉得什么时候继续执行
协程函数本体
由此可见,Unity中的协程调度器将我们自定义的协程函数进行迭代,迭代的过程中通过 yield return 的返回值,来进一步的处理后续的逻辑(具体怎么处理的看不到哈哈哈,Unity人家不让看)
yield return 这一句话,这个语法糖执行一次,内部就进行了一次迭代,代表了一次迭代的过程
协程的本质就是利用了C#的迭代器函数,然后Unity在此基础上封装了一些自己的功能(也就是Unity内部的协程调度器),实现了协程,达到了"分时分步执行"
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。