C# 是不是适合在 Unity 中使用 IEnumerator Coroutines 来处理应用程序的逻辑流程?

Posted

技术标签:

【中文标题】C# 是不是适合在 Unity 中使用 IEnumerator Coroutines 来处理应用程序的逻辑流程?【英文标题】:C# Is it appropiate to use IEnumerator Coroutines in Unity for the application's logic flow?C# 是否适合在 Unity 中使用 IEnumerator Coroutines 来处理应用程序的逻辑流程? 【发布时间】:2018-09-02 19:02:06 【问题描述】:

我正在使用 C# 在 Unity 中进行开发,想问一下是否适合使用 IEnumerator Coroutines 来确定应用程序对用户逻辑的执行?如果有任何其他最佳解决方案来实现这一点。

澄清为一系列严格的顺序动作...

    用户触发 GUI 操作。 打开表格,等待填写完毕。

    开始检查任务(4.)中是否满足获胜条件,如果完成则跳转到(5.)

    供用户完成的一系列顺序任务,在一个循环完成后将结果返回到 (3.)。在阶段 (3.) 和 (4.) 之间循环,直到满足获胜条件。

    满足获胜条件,通知用户最终结果。退出协程。

我确实希望我的逻辑是合理的,并为所涉及的具体任务的模糊性道歉。

【问题讨论】:

“是/否”是您想要的答案吗?如果是这样,那么是的! @Programmer Yes / No 绝对是让我满意的答案,但如果有人告诉我存在更好的方法及其背后的原因,这对我来说意义更大。 【参考方案1】:

出于正确的原因,使用协程完全没问题。虽然从我读到你正在做的是一个检查游戏状态的经理。

在这种情况下,我会做一个简单的管理器,它根本不使用更新循环或协程,而是任何可以更改游戏状态的游戏对象都会告诉管理器有关更改的信息。通过基本上扭转它,经理不必知道单个游戏对象,也不需要使用任何性能来检查所有相关对象。

使用此架构,您还可以添加一个事件处理程序架构,以解决游戏对象知道管理器的问题,现在您拥有一个与游戏完全解耦的管理器:)

【讨论】:

我绝对没有这么想,感谢您的意见!【参考方案2】:

虽然您的想法肯定是可能的,但一旦您有多个获胜条件(可能是失败条件)以及多个玩家,则很难维持。

如果您认为这对您来说是个问题,我建议将“游戏状态”设置为单例,并允许不同的游戏对象在各自的 Update() 调用中更改状态。

(我还想指出,在统一中创建单例相当容易 - 在 Awake() 期间将对象本身保存为静态变量)

【讨论】:

以上是关于C# 是不是适合在 Unity 中使用 IEnumerator Coroutines 来处理应用程序的逻辑流程?的主要内容,如果未能解决你的问题,请参考以下文章

(C#脚本)Unity中角色移动的几种实现方法,以及心得。(适合新手入门)

[Unity] C#中级编程 - 09 - 扩展方法

如何使用 Unity Engine 确定设备是手机还是平板电脑,是不是可以在 C# 中完成?

[Unity] C#中级编程 - 05 - 构造函数/封装/继承

如何在 Unity C# 中检查对象是不是面向某个方向

在 Unity / C# 中,.Net 的 async/await 是不是从字面上开始另一个线程?