Unity 绑定(订阅)事件方式
协程就是一种特殊的函数,它可以主动的请求暂停自身并提交一个唤醒条件,Unity会在唤醒条件满足的时候去重新唤醒协程。
当开始一个协程后,当前线程会先完成协程(或协程主动跳出),然后回到主线程。
协程 | 多线程 | |
---|---|---|
切换时机 | 自定 | CPU时间片为单位的系统调度 |
CUP核心 | 与主线程在同一核心 | 根据操作系统调度不同 |
对主线程的影响 | 卡顿会影响主线程 | 卡死都不影响主线程 |
线程同步影响 | 不存在线程同步问题 | 需要注意线程同步问题 |
线程开销 | 不存在线程开销 | 存在线程创建、销毁、切换的开销 |
书写方式 | 与普通函数一致 | 回调函数 |
yield语句 | 功能 |
---|---|
yield return null; | 下一帧再执行后续代码 |
yield return 0; | 下一帧再执行后续代码 |
yield return 6(任意数字); | 下一帧再执行后续代码 |
yield break; | 直接结束该协程的后续操作 |
yield return asyncOperation; | 等异步操作结束后再执行后续代码 |
yield return StartCoroution(其他协程); | 调用其他协程后再执行后续代码 |
yield return WWW(); | 等待WWW操作完成后再执行后续代码 |
yield return new WaitForEndOfFrame(); | 等待帧结束,等待所有摄像机和GUI被渲染完成后,在该帧显示在屏幕之前执行 |
yield return new WaitForSeconds(0.3f); | 等待0.3秒,一段指定的时间延迟之后继续执行,在所有的Update函数完成调用的那一帧之后(这里的时间会受到Time.TimeScale的影响) |
yield return new WaitForSecondsRealtime(0.3f); | 等待0.3秒,一段指定的时间延迟之后继续执行,在所有的Update函数完成调用的那一帧之后(这里的时间不受到Time.TimeScale的影响) |
yield return WaitForFixedUpdate | 等待下一次FixedUpdate开始时再执行后续代码 |
yield return new WaitUntil(); | 将协同程序执行直到当输入的参数(或者委托)为true的时候 |
yield return new WaitWhile(); | 将协同程序执行直到当输入的参数(或者委托)为false的时候 |
当某一个脚本中的协程在执行过程中,如果我们将该脚本的enable设置为false,协程不会停止(因为它是基于C#中的IEnumerator)。只有将挂载该脚本的物体设置为SetActive(false)时才会停止。 |
Unity在调用StartCoroutine()后不会等待协程中的内容返回,会立即执行后续代码。
1 |
|
1 |
|
Unity 绑定(订阅)事件方式
https://newztx.github.io/2024/07/24/Unity Coroutine协程/