标签:定义 unity 更新 new turn start -- 运行 void
理解:协程不是线程,也不是异步执行(知道就行)。
1.协程和MonoBehaviour的Update函数一样,也是在MainThread中执行的(一定得明白这句话意思)。
void Start () { StartCoroutine(HelloCoroutine()); } void Update () { Debug.Log("Update..."); } void LateUpdate() { Debug.Log("LateUpdate..."); } IEnumerator HelloCoroutine() { while (true) { Debug.Log("Coroutine..."); yield return null; } }
IEnumerator Count() { int seconds = 0; while (true) { for (float timer = 0; timer < 2; timer += Time.deltaTime) yield return 0; seconds++; Debug.Log(seconds + " seconds have passed since the Coroutine started."); } }
yiled return null 等同于 yield return 0
我这边的理解是,停止正在执行的方法,并从下一帧开始执行(一般是0.02秒,与Update的每一帧是一样的,具体看Unity设置的timer)。
4.协程是可以传递参数的。
5.协程还可以嵌套协程。
IEnumerator HelloCoroutinue() { Debug.Log("Start----"); yield return StartCoroutine(Wait(0.2f)); // yield return new WaitForSeconds(0.2f);最终达到的效果是一样的。 Debug.Log("End----"); } IEnumerator Wait(float s) { for(float timer =0;timer< s;timer+=Time.deltaTime) { Debug.Log("当前 timer" + timer.ToString()); yield return 0; // yield return null; } Debug.Log("Wait....."); }
看截图中画线的时间差,再次验证了与Update好像。暂停的时间都是一样的。
可以看到暂停了当前的方法去执行yield return后的方法。
补充注意:
a.多个协程可以同时运行,它们会根据各自的启动顺序来更新;
b.如果你想让多个脚本访问一个协程,可以定义为静态的协程;
(这篇博客是参考网上某篇博客,自己简化,加入了一点点自己的理解)
标签:定义 unity 更新 new turn start -- 运行 void
原文地址:http://www.cnblogs.com/u3ddjw/p/6711642.html