有点坑的unity协程
2017-09-25 18:48
176 查看
今天在程序逻辑的时候遇到一个小问题,就是在Awake开启了一个协程,发现协程怎么都无法往下执行。
void Awake ()
{
StartCoroutine (DelayCheckState ());
}
IEnumerator DelayCheckState(){
Debug.Log ("AAAA");
yield return null;
Debug.Log ("BBB");
CheckState ();
}
后来发现原来是因为其他地方将这个GameObject隐藏了再打开,以为是像Invoke一样,不显示的时候暂停,显示了再继续一样。
后来查到资料才知道:
II:StartCoroutine(IEnumerator routinue);
只能等待线程的终止而不能随时终止
销毁:StopAllStoroutines(),
协同程序所在的gameObject 的 active属性设置为false,再次设置active为true,协同程序将不会再次开启。
如果将协同程序所在的脚本的enable设置为false则不会消失。这是因为协同程序被开启后作为一个线程在运行,
而MonoBehaviour也是一个线程,他们成为互不干扰的的模块。他们公用一个对象,只有在这个对象不可见才能同时终止这两个线程。然而为了
管理我们额外开启的线程,Unity3D将协同程序的调用放在了MonoBehaviour中,这样在编程时就可以方便的调用指定的脚本中的协同程序,而不是
无法去管理,特别是对于只根据方法名来判断线程的方式在多人开发中很容易出错,这样的设计是为了保证对象,脚本的条件管理,并防止重名。
有点略坑。开此贴警示下。
void Awake ()
{
StartCoroutine (DelayCheckState ());
}
IEnumerator DelayCheckState(){
Debug.Log ("AAAA");
yield return null;
Debug.Log ("BBB");
CheckState ();
}
后来发现原来是因为其他地方将这个GameObject隐藏了再打开,以为是像Invoke一样,不显示的时候暂停,显示了再继续一样。
后来查到资料才知道:
II:StartCoroutine(IEnumerator routinue);
只能等待线程的终止而不能随时终止
销毁:StopAllStoroutines(),
协同程序所在的gameObject 的 active属性设置为false,再次设置active为true,协同程序将不会再次开启。
如果将协同程序所在的脚本的enable设置为false则不会消失。这是因为协同程序被开启后作为一个线程在运行,
而MonoBehaviour也是一个线程,他们成为互不干扰的的模块。他们公用一个对象,只有在这个对象不可见才能同时终止这两个线程。然而为了
管理我们额外开启的线程,Unity3D将协同程序的调用放在了MonoBehaviour中,这样在编程时就可以方便的调用指定的脚本中的协同程序,而不是
无法去管理,特别是对于只根据方法名来判断线程的方式在多人开发中很容易出错,这样的设计是为了保证对象,脚本的条件管理,并防止重名。
有点略坑。开此贴警示下。
相关文章推荐
- Unity协程(Coroutine)原理深入剖析再续
- Unity协程截图,WWWForm、WWW配合上传
- Unity学习疑问记录之协程
- Unity协程(Coroutine)原理深入剖析
- 【Unity优化】如何实现Unity编辑器中的协程
- Unity协程(Coroutine)原理深入剖析
- 最简单的 Unity 协程剖析
- Unity 协程使用指南
- Unity协程(Coroutine)原理深入剖析再续
- Unity Notes之协程(Coroutine)简析
- unity协程及典型案例-阿基米德螺旋线
- unity的协程的用途
- unity学习——初识unity3D中的协程
- unity学习——使用协程实现延时效果
- Unity协程(Coroutine)原理深入剖析
- Unity 协程与线程
- Unity 协程与线程
- unity,下面两个协程不等价
- Unity协程封装
- UNITY 3D 协程执行顺序