RTS游戏中的状态机



我正在开发RTS游戏,我希望能够构建结构,这意味着建设者将步行到目标位置,一旦到达,就开始构建。我想在每个单元中实现一个状态机,在用户输入时可以添加状态,因为当单元守卫位置和其他东西时,这可能会派上用场。我的问题是:为每个个人、用户拥有的单元创建一个状态机有用吗?还是这是一个陷阱?

状态机在游戏中很常见

状态机是游戏中对象、NPC等行为的常用方法。

它们非常常用,因此经常得到游戏引擎的支持:例如:Unity

一个状态机陷阱可能是一个简单实现的资源消耗,例如,一个使用状态模式的实现,只有在没有相对较少的状态机同时运行的情况下,这才是可以的,否则,对于数千个并发状态机来说,状态模式的资源消耗将高得令人望而却步。

如果你确实打算让数千个单独的状态机同时运行,或者需要极高的效率,你就必须用更简单的方法来实现它们:例如:C.中的嵌套切换语句或基于表的实现示例

使用状态机的原因,一般来说,不仅仅是在游戏中

使用状态机的主要原因是清晰地建模问题:您可以通过绘制状态机,例如使用GraphViz等工具或手动,直观地思考边缘条件。确切地说,更容易看出在哪种情况下会发生什么。

有时,你的问题"只需要"一个状态机表示:它有"状态"和复杂的行为,这些行为取决于过去的事件。

状态机背后有几十年的计算机科学研究,关于分析它们、简化它们等的算法也是众所周知的。

如果你试图通过手动"添加和删除If语句"来建模状态机,你最终会得到更混乱的代码,你将无法转换、建模等。

在"缺点"方面,如果使用基于表的状态机,那么调试它们会有些困难。

最新更新