RTS 游戏中的状态机

Statemachine in RTS game

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

状态机在游戏中很常见。

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

它们是如此常用,以至于它们经常被游戏引擎支持:例如:Unity

状态机的缺陷可能是天真的实现会消耗资源,例如一个使用 State Pattern,只有在同时没有相对较少的状态机 运行 时才可以,否则状态模式的资源消耗对于数千个并发状态机来说会高得令人望而却步。

如果您确实打算同时拥有数千个单独的状态机 运行,或者需要极高的效率,则必须使用更简单的方法来实现它们:例如:嵌套的 switch 语句或 table 基于实现 examples in C.

一般情况下使用状态机的原因,不仅在游戏中。

使用状态机的主要原因是清晰地为您的问题建模:您可以通过画出状态机来直观地考虑边缘条件,例如通过使用诸如 GraphViz 之类的工具或手动。 更容易准确地看到在哪种情况下会发生什么。

有时您的问题 "just calls" 状态机表示:它具有 "states" 和复杂的行为,这取决于过去的事件。

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

如果您尝试手动建模状态机 "by adding and removing IF statements",you will end up with messier code,您将无法对其进行转换、建模等

在 "cons" 方面,如果您使用基于 table 的状态机,调试它们会有些困难。