Unity笔记—8(Unity常用API整理之协程)
文章目录
前言
自学笔记,没有历史知识铺垫(省略百度部分),系列性的记录核心的实用笔记,本章主要记录Unity常用API协程相关内容
一、MonoBehaviour.StartCoroutine(内置开启协程方法)(核心)
启动/关闭协程的方法方法名操作协程
开启协程:StartCoroutine(string methodName); //方法名开启协程
关闭协程:StopCoroutine(“协程方法名“);
方法名+参数操作协程
开启协程 StartCoroutine(string methodName, [DefaultValue(“null”)] object value)//方法名开启协程,参> 数开启协程,该方法只适用于协程只有一个参数的时候
关闭协程 StopCoroutine(“协程方法名”);
方法操作协程
开启协程 StartCoroutine(IEnumerator routine);//方法开启协程,可传递多个参数
关闭协程 StopCoroutine(IEnumerator routine);//关闭第一个该方法的协程,关闭不实用
public Coroutine StartCoroutine_Auto(IEnumerator routine); //(已被废弃)
注意
- 协程方法通常实用IE开头作为规范,用于区分普通方法
- 协程必须有有返回值,且返回值类型为IEnumrator。返回值语句为yield retuen 表达式或值 或 yield break。
- yield:挂起,程序遇到yield关键字时会被挂起,暂停执行,等待条件满足时从当前位置继续执行
- 如果yield返回的对象结果为false则协程停止向下运行
- 如果yield返回的对象结果为true则协程继续向下运行
//yield常用方法如下
yield return null; //下一帧继续执行
yield return 任意数字; //下一帧继续执行
yield break; //直接结束,不执行后续代码
yield return WWW();//等待WWW操作完成后再执行后续代码
yield return new WaitForEndOfFrame();//等待帧结束,等待直到所有的摄像机和GUI被渲染完成后,在该帧显示在屏幕之前执行
yield return new WaitForSeconds(2.2f);//延迟2.2秒后向下执行,在所有的Update函数完成调用的那一帧之后(受到Time.timeScale的影响)
yield return new WaitForSecondsRealtime(2.2f);//延迟2.2秒后向下执行,一段指定的时间延迟之后继续执行,在所有的Update函数完成调用的那一帧之后(不受到Time.timeScale的影响)
yield return WaitForFixedUpdate();//等待下一次FixedUpdate开始时再执行后续代码
yield return new WaitUntil(Func<bool>);//自定义Func<bool>委托作为WaitUntil参数,yield的返回标志,实际bool相应调用MoveNext,如果true则向下执行,如果false则停止执行
yield return new WaitWhile(Func<bool>)//自定义Func<bool>委托作为WaitWhile参数,如果委托返回true则一直循环执行,如果委托返回false则结束循环并向下执行
yield return StartCoroution(指定协程方法名);//执行指定协程方法并等待指定协程方法运行结束后运行
yield return asyncOperation;//异步操作结束后执行,如用于异步载入场景
协程异步yield操作场景
Unity3D研究院之异步加载游戏场景与异步加载游戏资源进度条(三十一)
二、IEnumerator协程方法返回标志(协程结果)
协程中方法必须的返回标志,实际上是维护协程的迭代器Current属性
当前元素
MoveNext方法
返回true/false,协程本质并不是真的多线程,主线程每次update时都会更新一下这个实力,查看是否有下一个节点,如果有则返回true并将下一个节点赋值给Current属性
Reset方法
协程暂无使用
三、实用场景如
- 多资源加载
- 场景切换
- 血量缓慢下降
- 分数增长
- 倒计时
- 动作附加特效
- 积分提醒
- 经验提醒
- …
总结
Unity协程的笔记,大概了解Unity协程的运作原理以及常用的方法,总结可以在coding中使用的场景等