Unity协程

首先声明,博主使用的是unity5.3.2(64)

我们在游戏开发中经常会遇到同时加载多个资源,寻路,说完一句话在寻路到某一点等等问题。所以为了解决这些问题,unity提出了协程这个东西。

设计协程的目的就是为了同步并行的逻辑,避免多线程带来的麻烦,协程是假的多线程,可以将复杂的逻辑分到主线程不同帧去执行。


协程的使用:

using UnityEngine;
using System.Collections;

public class CoroutineLearn : MonoBehaviour {

    // Use this for initialization
    void Start () {
        //使用循环输出0到999999这是最直接的方式,但是这个整体将在一帧的时间搞定,如果你这样做了,运行unity,很大程度上会崩掉
        //for (int i = 0; i < 1000000; i++) {
            //print (i);
        //}
        //使用协程的方式去输出0到999999
        StartCoroutine ("Test",1000000);//这是启动协程的第一种方式(协程名字,参数值)需要注意,这种方式只能有一个参数
        StartCoroutine (Test(1000000));//这是启动协程的第二种方式,直接传一个协程实体,所以这种方式不受参数个数的限制
    }

    // Update is called once per frame
    void Update () {

    }
    //协程使用了C#的迭代作为返回值
    IEnumerator Test(int times){
        for (int i = 0; i < times; i++) {
            print (i);
            yield return null;//将输出分到每一帧去
        }
    }
}

为什么说协程是假的多线程,协程与多线程最大的区别在于,协程干的事最终是由主线程来干的,它的特点就是把一段逻辑进行了分解,yield就是用来分解的点,每次yield都会离开本次执行,迭代器会记住这个位置和上下文,下一次update时会从协程上次离开的位置继续执行

协程的几种常用操作:

using UnityEngine;
using System.Collections;

public class CoroutineLearn : MonoBehaviour {

    // Use this for initialization
    void Start () {

    }

    // Update is called once per frame
    void Update () {

    }

    IEnumerator Test(int times){
        for (int i = 0; i < times; i++) {
            print (i);
            //yield return null;//表示下一帧帧开始的时候执行下面的代码
            //yield return new WaitForEndOfFrame ();//表示本帧结束的时候去执行下面的代码
            //yield return new WaitForFixedUpdate ();//表示等到ForFixedUpdate ()函数执行完后执行下面的代码
            //yield return new WaitForSeconds (2f);//表示等待2秒后执行下面的代码
            }
        }

        IEnumerator DownLoad(){
        WWW www = new WWW ("http://www.baidu.com");
        yield return www;//等待一个下载完成后执行下面的代码
        print (www.text);
      }
    //协程可以通过等待另一个协程而串联起来
    IEnumerator Work(){
        yield return StartCoroutine ("DownLoad");//协程可以等待另一个协程执行完再执行下面的代码
        yield return StartCoroutine ("Test",20);
        print ("success");
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值