Hod*_*dor 3 state-machine fsm coroutine unity-game-engine
我刚刚开始学习Unity脚本,并且很难理解为什么有些人比状态机更喜欢协程。
我确实知道某些程序员可能更容易理解代码,但我不明白为什么有人说使用协程对性能更可取。
我在Unity中使用C#,据我所知,C#编译器将IEnumerator转换为状态机。
所以也许我在这里错过了一些东西。使用协程而不是FSM循环来处理行为和状态是否对运行时性能更好?如果是,为什么?
在某些情况下,使用协程会更快,因为您可以方便地调度Unity以一定间隔执行操作,而不是每帧都进行一次操作,从而节省了处理时间。真正的安排是节省时间,而不是协程本身。
以您在Unity文档中突出显示的示例(在其他答案中用注释表示)为例:
使用协程。Update调用的问题在于它们发生在每一帧。仅每5秒执行一次可能的检查距播放器的距离。这样可以节省很多处理能力。
这就是说,使用协程WaitForSeconds( 5f )将比检查每帧的距离更快。这并不意味着这样做必然比让您自己的Update逻辑每五秒钟检查一次的速度更快。
话虽如此,如果协程方法仍然比Update基于每5秒检查一次的逻辑更快(尽管速度并不那么快),我不会感到惊讶,因为您仍然可以节省检查当前帧中每个帧的时间。您的游戏代码。是的,这次检查仍在Unity引擎循环中的某个地方进行,并用于确定是否要进行下一步协同程序,但是它可能已高度优化,而且无论如何都在进行,因此协程并没有添加太多的额外时间检查逻辑作为Update基于方法。
顺便说一句,有关Unity如何实现协程的一个很好的概述,请参阅此博客文章。
| 归档时间: |
|
| 查看次数: |
8428 次 |
| 最近记录: |