Unity 协程,停止 以及 yield return 的用法

1.开启协程
第一个
public Coroutine StartCoroutine(IEnumerator routine);
第二个
public Coroutine StartCoroutine(string methodName, object value);
第三个
public Coroutine StartCoroutine(string methodName);
第四个
public Coroutine StartCoroutine_Auto(IEnumerator routine);

查看MonoBehaviour 源代码可以知道 开启协程有 4个方法,其中第四个开启协程的方法已经被弃用了。
第二个与 第三个的区别 仅是一个带参数的协程,与不带参数的区别。
第一个与第二个(第三个) 的主要区别是他们的停止方式有比较大的差异,yield return 也是有所不同的。 详情,请往下看。

2.停止协程
第一:协程脚本所在的游戏物体 active = false 会停止物体,以及子物体上的所有协程。并且即使再次 active = true 也不会恢复协程的运行。
第二: 脚本enbale = false 不会阻止协程的运行
第三:调用 StopAllCoroutines() 方法将停止该monobehaviour 开启的所有协程。
第三:调用 StopCoroutine 方法来停止协程, 这个方法有两个重载。
参数为Coroutine 的,可以传入指定的协程,将其停止。这里值得注意的是,这个协程必须是本monobehaviour 开启的,否则将会引发异常!“Coroutine continue failure”
参数为 string 的, 可以传入协程的方法名称来停止协程。这个只能停止以方法名称开启的协程。

3.yield break 与 yield return
yield break 比较简单,就是跳出协程,相当于普通方法中的 return。协程中不能使用return 来跳出方法体。

yield return 后面可以接 任意类型。 假设后面 接的类型是 K
如果 K 是 YieldInstruction 类型,将会有一些特殊的意义。下面再详细解释
如果 K 是 Coroutine 类型,将会Coroutine的完成才会继续向下执行,值得注意的是,Coroutine 并不一定是刚开启的协程,也可以是已经运行过一段时间的协程。
如果 K 是 除以上两种外的类型,将会等待一帧Update 后继续向下执行。

详细来研究下YieldInstruction 类型。
YieldInstruction 有以下子类
WaitForEndOfFrame:等待所有相机与GUI渲染只后,直到帧结束,继续执行后续代码
WaitForFixedUpdate:等待下一个FixedUpdate() 之后,继续执行代码。
WaitForSeconds():等待指定的秒钟后将继续往下执行。该参数受到Time.Scale 的影响。
WaitForSecondsRealtime():等待指定的秒钟后将继续往下执行,该参数不受Time.Scale的影响。
WaitUntil() 等待方法返回True继续往下执行
WaitWhile() 等待方法返回False继续往下执行

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值