本文共 2256 字,大约阅读时间需要 7 分钟。
最近在学习Unity协程调度器
最近在学习Unity协程调度器,发现了一篇非常有趣的文章。通过阅读相关资料,我对协程的运行机制有了更深入的理解。协程调度器是一个非常强大的工具,能够帮助开发者更好地管理和协调多个协程的执行。
协程调度器的基本功能
协程调度器允许开发者完全控制一套协同程序的执行机制。通过阅读代码,我了解到协程调度器如何在幕后工作。例如,协程可以通过yield;等待下一次更新,或者通过yield anInt;等待指定数量的更新。还可以通过yield aFloat;等待给定的秒数,或者通过yield scheduler.StartCoroutine(Coroutine());等待另一个协程完成。
一个简单的协同调度程序
我找到了一个简单的协同调度程序代码。这个代码允许开发者完全控制协同程序的执行机制。通过阅读代码,我了解到协同程序如何构建.Net发电机的基础上构建,并将协同支持添加到非Unity的项目中。
代码示例
using UnityEngine;using System.Collections;public class testAPI : MonoBehaviour{ CoroutineScheduler scheduler; CoroutineScheduler m_scheduler2; string requestURL = "http://www.my-server.com/cgi-bin/screenshot.pl"; void Start() { scheduler = new CoroutineScheduler(); scheduler.StartCoroutine(MyCoroutine()); m_scheduler2 = new CoroutineScheduler(); m_scheduler2.StartCoroutine(test()); } IEnumerator MyCoroutine() { Debug.Log("MyCoroutine: Begin"); yield return 0; Debug.Log("MyCoroutine: next update;" + Time.time); yield return 2; Debug.Log("MyCoroutine: After yield 2;" + Time.time); yield return 3.5f; Debug.Log("MyCoroutine: After 3.5 seconds;" + Time.time); yield return scheduler.StartCoroutine(WaitForMe()); Debug.Log("MyCoroutine: After WaitForMe() finished;" + Time.time); } IEnumerator WaitForMe() { yield return 7.8f; } void Update() { scheduler.UpdateAllCoroutines(Time.frameCount, Time.time); } IEnumerator test() { // ...设置请求 var www = new UnityEngine.WWW(requestURL); yield return new UnityWWWYieldWrapper(www); // ...加载完成后执行操作 }} 项目地址
通过阅读代码,我了解到协同程序如何在不同的调度程序实例下运行。这个调度程序支持多个实例,并且可以在不同的时间点启动协程。这种设计使得协程能够在不同的调度程序实例下运行,非常有用。
协同程序的运行机制
在Unity中,协同程序的运行机制与自定义调度程序略有不同。例如,Unity会在协同程序的第一次yield时立即运行,而自定义调度程序会在下一次UpdateAllCoroutines调用时才运行。这种设计允许开发者在任何时候启动协程,并确保协程只能在特定的时间运行。
注意事项
在使用同一个更新调度程序运行多个协程时,不能依赖更新的顺序。例如,StartCoroutine(A)、StartCoroutine(B)、StartCoroutine(C),其中A、B、C都在循环中不断调用print(A|B|C); yield;,不要假设输出顺序会是ABC或CBA等。
总结
通过学习和实践,我对Unity协程调度器有了更深入的理解。协程调度器是一个非常强大的工具,能够帮助开发者更好地管理和协调多个协程的执行。通过阅读代码和实际使用,我学会了如何在非Unity项目中集成协同支持。
通过这次学习,我对协程调度器的实现和使用有了更全面的认识。未来,我希望能够进一步探索协程调度器的更多功能,并在实际项目中应用这些知识。
转载地址:http://reoa.baihongyu.com/