协程

作者: 混世小码农 | 来源:发表于2022-03-03 18:29 被阅读0次

    开启线程

    Unity3D中,使用StartCoroutine(string xxx)和StartCoroutine(IEnumerator xxx)都可以开启一个线程。

    区别在于:

    1.  使用字符串作为参数可以开启线程并在线程结束前终止线程;

          使用IEnumerator 作为参数只能等待线程的结束而不能随时终止(除非使用StopAllCoroutines()方法);

    2.   使用字符串作为参数时,开启线程时最多只能传递 一个参数,并且性能消耗会更大一点;

           使用IEnumerator 作为参数则没有这个限制。

    终止协同程序

    1. 使用StopCoroutine(string methodName)来终止一个协同程序,使用StopAllCoroutines()来终止所有可以终止的协同程序,但这两个方法都只能终止该 MonoBehaviour中的协同程序

    2. 还有一种方法可以终止协同程序,即将协同程序所在gameobject的active属性设置为false,当再次设置active为ture时,协同程 序并不会再开启;如是将协同程序所在脚本的enabled设置为false则不会生效。这是因为协同程序被开启后作为一个线程在运行,而 MonoBehaviour也是一个线程,他们成为互不干扰的模块,除非代码中用调用,他们共同作用于同一个对象,只有当对象不可见才能同时终止这两个线 程。然而,为了管理我们额外开启的线程,Unity3D将协同程序的调用放在了MonoBehaviour中,这样我们在编程时就可以方便的调用指定脚本 中的协同程序,而不是无法去管理,特别是对于只根据方法名来判断线程的方式在多人开发中很容易出错,这样的设计保证了对象、脚本的条理化管理,并防止了重 名。

    相关文章

      网友评论

          本文标题:协程

          本文链接:https://www.haomeiwen.com/subject/wxwzfxtx.html