Unity3D协同程序

原文来自博客园http://www.cnblogs.com/xpvincent/archive/2013/07/25/3214388.html 

还有网易博客http://wg2009perfect.blog.163.com/blog/static/127997663201211111222126/

【协同程序】

协同程序——在主程序运行的同时开启另一就是段逻辑处理,来协同当前程序的执行,开启协同程序就是开启一个线程。

【开启协同程序】

使用MonoBehavior.StartCoroutine可以开启一个协同程序,所以该方法需要在继承Monobehaviour的类中调用

Unity3D中,使用StartCoroutine(String methodName)和startCoroutine(IEnumerator routine)都可以开启一个线程,

a. 使用字符串作为参数可以开启线程并在线程结束之前终止线程,开启线程最多只能传递一个参数

b. 使用IEnumeraotor开启的的线程不能随时终止(除非使用StopAllCoroutines()方法)

没有参数个数的限制

【终止协同程序】

a. Unity使用StopCoroutine(String methodName)来终止一个协同程序,使用StopAllCoroutine来终止所有协同程序,但是这两个方法都只能终止该MonoBehaviour中的协同程序

b. 将协同程序所在的gameObject的acitve属性设置为false,当再次设置active为true的时候,协同程序不会再开启,而设置enable和false则不会生效,因为协同程序开启后是以一个线程在运行的,它与MonoBehavior是互不干扰的模式在运行,此后除非代码调用,他们共同作用于同一个对象,只有当对象不可见的时候才能够同时终止这两个线程。

 

【基本的yield和StartCoroutine讲解】

写游戏代码,往往最终需要代码为连续的事件.结果会像这样:
[它可以实现将一段程序延迟执行或者将其各个部分分布在一个时间段内连续执行。]

 1: <span style="font-size:18px;">private int state = 0;
 2: void Update()
 3: {
 4: if (state == 0)
 5: {
 6: //做步骤0
 7: state = 1;
 8: return;
 9: }
 10: if (state == 1)
 11: {
 12: // 做步骤1
 13: state = 2;
 14: return;
 15: }
 16: // ...
 17: } </span>

往往使用yield语句更为方便.yield语句是一个特殊的返回类型,它确保函数从yield语句的下一行继续执行.

 1: <span style="font-size:18px;">while(true) {
 2: // 做步骤0
 3: yield return 0;
 4: // 等待一帧
 5: // 做步骤1
 6: yield return 2;
 7: // 等待两帧
 8: // ...
 9: } </span>
你也可以传递时间值到yield语句,Update函数会在yield结束后执行下一语句.
 1: <span style="font-size:18px;"> // do something
 2: yield return WaitForSeconds (5.0);
 3: //等待5秒
 4: // do something more... </span>
你可以入栈并连接协程.
这个例子将执行Do,但是do函数之后的print指令会立刻执行.
 1: <span style="f
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值