U3D协程
2017-12-26 11:08
106 查看
1. 什么是协程
协程是一个分部执行方法,遇到条件(yield return语句)会挂起,直达条件满足才会被唤醒继续执行后面的代码。协程实际上就是一个IEnumerator(迭代器)。Unity本身的生命周期与协程是并行的。2.C#脚本中创建协程需要遵循的规则
-协程的返回值必须是IEnumerator -协程的参数不能加关键字ref或out -在c#脚本中必须通过StartCoroutine来启动协程 -yield语句要用yield return来替代 -在函数Update和FixedUpdate中不能使用yield语句,但是可以启动协程
3.类的继承关系
在unity中绝大多数协程相关的类都继承自基类YieldInstruction,唯一例外的是WWW,它不继承自YieldInstruction,但可以用在yield return语句中。4.yield语句的用法
形式 | 意义 |
---|---|
yield return null; | 等待下一帧中的Update函数执行完之后在执行 |
yield return new WaitForSeconds(10); | 延迟10秒后在执行 |
yield return new WaitForFixedUpdate(); | 等待所有脚本中的FixedUpdate函数在执行 |
yield return new WWW(url); | 等待url下载完后执行 |
yield return StartCoroutine(MyFunc()); | 等待协程MyFunc结束后再执行 |
yield break; | 跳出协程 |
yield return 1; | 等待下一帧继续,0、1或者100都是一帧 |
yield return new WaitForEndOfFrame(); | 等待该帧中所有的Camera和GUI对象渲染完毕,在帧被显示到屏幕之前恢复执行前面的代码 |
- yield return 语句不能位于try-catch语句块中,但可用于try-finally的try语句块中
- yield return语句不能放在匿名方法中
- yield return语句不能放在unsafe语句块中
4.协程的启动
C#脚本中,MonoBehaviour类的成员函数StartCoroutine用于启动协程,函数的声明为:public Coroutine StartCoroutine(IEnumerator routine);
pubic Coroutine StartCoroutine(string methodName, object value=null);
从声明上可以看出:
1. StartCoroutine 只能在MonoBehaviour或其子类中使用
2. StartCoroutine接收协程名称(字符串)或IEnumerator实例作为参数
3. 使用字符串作为参数启动协程时可在StartCoroutine的第二个参数中为协程指定参数,但最多只能传递一个参数,而使用IEnumerator作为参数则没有这个限制。
5.协程的终止
1.可以使用StopCoroutine来终止一个协程,只适用于协程名称作为参数启动的协程。2.使用StopAllCoroutines可以终止该MonoBehaviour中所有能终止的协程。
3.将协程所在的游戏对象的active属性设为false,再次将active属性设为true时,协程不会自动启动(不常用)
相关文章推荐
- c#调用COM组件
- Python Web 应用程序 Tornado 框架简介
- 程序运算小笔记:C#程序设计运算符
- 关于PHP协程与阻塞的思考
- C#拼图游戏编写代码(2)
- C#实现把指定数据写入串口
- C#动态创建button的方法
- c#中list.FindAll与for循环的性能对比总结
- C#图像亮度调式与伪彩色图的处理教程(推荐)
- C#使用第三方组件生成二维码汇总
- C#中抽象方法与虚拟方法的区别
- c#中虚函数的相关使用方法
- C#实现给图片加水印的方法
- C#使用加边法计算行列式的值
- C#实现多线程的同步方法实例分析
- C#集合Collections购物车Shopping Cart(实例讲解)
- C#中尾递归的使用、优化及编译器优化
- C#中的delegate委托类型基本学习教程
- C# 动态加载程序集信息