博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Unity协程实际作用
阅读量:5090 次
发布时间:2019-06-13

本文共 1227 字,大约阅读时间需要 4 分钟。

   最近在学习uinty,用到了协程这个东西。网上查阅了很多资料,介绍的都十分复杂,而且没有太大价值,不得不说有项目经验的人果真厉害,几句话就点醒了我,现在直接解释。

1. 协程不是多线程!!! 协程还是在主线程里面,这点十分重要,不要被网上其他资料误导。

2. 协程不是只能做简单的延迟,虽然你可能用过下面的延迟几秒的代码,但是协程的价值在这里完全体现不出来。

 

void Start()    {        StartCoroutine(coRoutine());    }    IEnumerator coRoutine()    {        yield return new WaitForSeconds(1);    }

因为其实这种只是暂停几秒,完全没必要单独开一个协程,下面这种方法也可以实现

 

 

IEnumerator Start () {              // StartCoroutine(coRoutine());        Debug.Log("1");       yield return new WaitForSeconds(3);       Debug.Log("2");         	}

是不是很意外,start竟然也可以return,当然一般不这么做,这个例子只是为了说明协程不只是用来做延迟的

 

3. 协程的真正用途是分步做一个比较耗时的事情,比如游戏里面的加载资源

 

private int num = 0;private const  int total=30;	void Start()    {        StartCoroutine(coRoutine());    }   IEnumerator coRoutine()    {        while (num

 

上面的代码是个简单的例子,比如我们加载的资源有30个(total),但是一次加载完毕会耗费大量的时间,不可能让玩家在start中等待这么久,这时候协程的作用就出现了,协程是每帧lateUpdate之前执行yield return之前的代码,lateupdate之后执行yield return之后的代码,相当于每帧循环一次(前提是你的协程有循环体,否则一帧就执行完了),具体可以复制我的代码看一下日志,这样就不会卡在这加载30个资源这里,而是你在update里面继续做你的事情,我每次只加载1个,加载1个耗时显然远远小于30个。

上面的例子具体可以对应进入一张地图加载NPC,当你进入一张地图后,如果一次性加载30个NPC,你可能就卡在进地图的地方,等待这30个NPC全部加载出来之后才能行动,但是用了协程,你可以移动,可能你移动一步(或者几步),加载一个NPC,实际上你根本感受不到移动过程中有停顿的现象。

 

转载于:https://www.cnblogs.com/InitialD/p/7348875.html

你可能感兴趣的文章
深度学习基础网络 ResNet
查看>>
js(事件) d3
查看>>
算法学习-带分数
查看>>
Pomodairo,番茄工作法-应用篇
查看>>
XML 之 与Json或String的相互转换
查看>>
Android 之 权限 uses-permission 设置
查看>>
关于面试技巧
查看>>
JavaScript学习笔记(二)
查看>>
salesforce零基础学习(七十七)队列的实现以及应用
查看>>
H5视频播放自动全屏,暂停退出全屏等功能
查看>>
【代码笔记】iOS-对iphone手机进行判断的一些函数
查看>>
easyui源码翻译1.32--ComboTree(树形下拉框)
查看>>
精度--洛谷 P1378 油滴扩展
查看>>
MAC Mysql 重置密码
查看>>
各种编码转换
查看>>
BroadcastReceiver的使用,动态注册和注销,优先级和中断控制
查看>>
Python能做些什么及我的Python学习疑问
查看>>
sublime text3的使用
查看>>
白帽子-高端信息安全培训视频教程
查看>>
opencv入门笔记之三 简单图像识别,识别线,点,圆,轮廓
查看>>