请教@yield和sectionn和@yield的区别

1098人阅读
Unity(30)
最近学习协程Coroutine,参考了别人的文章和视频教程,感觉协程用法还是相当灵活巧妙的,在此简单总结,方便自己以后回顾。
首先是yield return的常见返回值及其作用:
yield return new WaitForSeconds(3.0f); // 等待3秒,然后继续从此处开始,常用于做定时器
// 这一帧到此暂停,下一帧再从暂停处继续,常用于循环中
yield return new WaitForEndOfFrame(); // 等到这一帧的cameras和GUI渲染结束后再从此处继续,即等到这帧的末尾再往下运行。这行之后的代码还是在当前帧运行,是在下一帧开始前执行,跟return null很相似
yield return new WaitForFixedUpdate(); // 在下一次执行FixedUpdate的时候继续执行这段代码,即等一次物理引擎的更新
// 等待直至异步下载完成
// 直接跳出协程,对某些判定失败必须跳出的时候,比如加载AssetBundle的时候,WWW失败了,后边加载bundle没有必要了,这时候可以yield break跳出。
yield return StartCoroutine(methodName); // 等待另一个协程执行完。这是把协程串联起来的关键,常用于让多个协程按顺序逐个运行
然后是协程Coroutine的常见用法:
① 将复杂操作分帧计算。
public class TestStepToCalculate : MonoBehaviour {
void Start () {
StartCoroutine(Calculate(1000));
IEnumerator Calculate(int times)
int num = 0;
for (int i = 0; i & i++)
Debug.Log(Mathf.Pow(i, 10));
if (++num &= 10)
yield return null;
② 异步下载。
public class TestAsynDownload : MonoBehaviour {
void Start () {
StartCoroutine(Work());
IEnumerator Work()
WWW www = WWW("");
yield return
Debug.Log(www.text);
③ 使用yield return coroutine等待协程,将多个异步逻辑串联。如先进行异步下载,完成下载任务后再接着运算。
public class TestMultipleCoroutine : MonoBehaviour {
void Start () {
Debug.Log("111");
StartCoroutine(Work());
Debug.Log("222");
IEnumerator Work()
yield return StartCoroutine(Download());
yield return StartCoroutine(Calculate(10));
Debug.Log("Finish");
IEnumerator Download()
WWW www = new WWW("");
yield return
Debug.Log(www.text);
yield return new WaitForSeconds(3.0f);
IEnumerator Calculate(int times)
for (int i = 0; i & i++)
Debug.Log(Mathf.Pow(i, 10));
yield return null;
④ 创建互斥区。如某个下载函数同一时刻只能有一个协程进入。
public class TestCriticalSection : MonoBehaviour {
private bool isDownloading = false;
void Start () {
StartCoroutine(Download("a"));
StartCoroutine(Download("b"));
IEnumerator Download(string path)
while(isDownloading){
yield return null;
isDownloading = true;
WWW www = new WWW("");
yield return
Debug.Log(path);
isDownloading = false;
⑤ 待续。。。
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:161297次
积分:2905
积分:2905
排名:第12794名
原创:128篇
转载:28篇
(2)(15)(21)(5)(18)(12)(14)(26)(30)(3)(4)(6)
(window.slotbydup = window.slotbydup || []).push({
id: '4740887',
container: s,
size: '250,250',
display: 'inlay-fix'安全检查中...
请打开浏览器的javascript,然后刷新浏览器
< 浏览器安全检查中...
还剩 5 秒&

我要回帖

更多关于 join yield 区别 的文章

 

随机推荐