Unity的协程

这篇文章转自:
http://blog.csdn.net/huang9012/article/details/38492937
https://www.cnblogs.com/zsb517/p/4107553.html

为了能在连续的多帧中调用该方法,Unity必须通过某种方式来存储这个方法的状态,这是通过IEnumerator 中使用yield return语句得到的返回值,当你“yield”一个方法时,你相当于说了,“现在停止这个方法,然后在下一帧中从这里重新开始!”。

注意:用0或者null来yield的意思是告诉协程等待下一帧,直到继续执行为止。当然,同样的你可以继续yield其他协程

public class CoroutineTest : MonoBehaviour {

    // Use this for initialization
    void Start ()
    {
        StartCoroutine(SaySomeThings());
    }

    IEnumerator SayHelloFiveTimes()
    {
        Debug.Log("1");
        yield return 0;
        Debug.Log("2");
        yield return 0;
        Debug.Log("3");
        yield return 0;
        Debug.Log("4");
        yield return 0;
        Debug.Log("5");
        yield return 0;
    }

    IEnumerator SaySomeThings()
    {
        Debug.Log("The routine has started");
        yield return StartCoroutine(Wait(1.0f));
        Debug.Log("1 second has passed since the last message");
        yield return StartCoroutine(Wait(2.5f));
        Debug.Log("2.5 seconds have passed since the last message");
    }

    IEnumerator Wait(float duration)
    {
        for (float timer = 0; timer < duration; timer += Time.deltaTime)
            yield return 0;
    }
}

可以单步跟踪 IEnumerator SayHelloFiveTimes() ,看看执行顺序!
另一个是嵌套的协程

yield return new WaitForSeconds(0.2f);
yield return new WaitForEndOfFrame();
1.如果只是等待下一帧执行,用yield return null即可。调用顺序在Update后,LateUpdate前

2.如果有截屏需要,用WaitForEndOfFrame。具体参考官方例子。否则直接用Texture2D.ReadPixel抓取屏幕信息则会报错。

3.此外,用WaitForEndOfFrame还可以让代码在LateUpdate的时序后调用。
https://www.cnblogs.com/hont/p/6477384.html

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1.迭代器   首先我们要谈的就是迭代器,很多情况下我们都使用了迭代器,并不仅仅是因为协程,当我们使用foreac...
    joshuaAS阅读 2,869评论 1 4
  • 协程介绍 Unity的协程系统是基于C#的一个简单而强大的接口,IEnumerator,它允许你为自己的集合...
    壹米玖坤阅读 6,281评论 0 9
  • 为什么需要协程 在游戏中有许多过程(Process)需要花费多个逻辑帧去计算。 你会遇到“密集”的流程,比如说寻路...
    tmgg阅读 1,413评论 0 5
  • day2_init_.py 数据的增删改查1、数据的写入 第一种方式 第二种方式 第三种方式 2、数据的查找 al...
    七一欧阅读 241评论 0 1
  • 也许是因为无聊,也许是为了减肥,散步成了每天的必修课。之前一天三天我,现在基本一天一次。都在晚饭过后。 晚饭过后,...
    红玫瑰和白汽球阅读 272评论 0 0