使用设计模式状态模式有穷状态机编写简单怪物AI
简单的游戏怪物AI

有穷状态机:有穷状态机的作用是描述对象在它的生命周期内所经历状态序列,以及如何响应来自外界的事件。有穷状态机首先包含一个有限状态的集合,还包含了从一个状态到另外一个状态的转换。

这是一个有穷状态机的例子:

使用设计模式状态模式有穷状态机编写简单怪物AI

这是一个unity里动画控制器的例子:

使用设计模式状态模式有穷状态机编写简单怪物AI

是不是有些像,其实动画器就是个有穷自动机,所以我们可以把状态和动画联系起来,一个怪物通过不同的状态来调用不同的动画,达到一个简单的AI效果

使用设计模式状态模式有穷状态机编写简单怪物AI

这是我刚写的一个Idlestate状态它对应上图的idle动画,实现一个统一的状态接口,上面的三个函数就是实现的接口函数,分别是进入状态,更新状态,退出状态,每一个状态都会有这样的一个状态类。

使用设计模式状态模式有穷状态机编写简单怪物AI

这是一个有穷状态机,先用字典把所有的状态注册,Start()函数的前两行。

使用设计模式状态模式有穷状态机编写简单怪物AI

里面的TransitionState是用来转移状态

这样就实现了一个怪物不同状态对应不同的动画,实现在脚本中改变怪物的动画。

我们只需要考虑哪些事件出现时改变状态

使用设计模式状态模式有穷状态机编写简单怪物AI

我这里在这个怪物里声明了一个子物体area,设置他的碰撞边界(绿色方框),当有人触碰到边界时他的状态,从idle变为attack

使用设计模式状态模式有穷状态机编写简单怪物AI

这是FSM里的代码,当有player碰撞到边界时,parameter.target不再为空,就变换状态。

上面只是举一个简单里例子,你可以实现很多种状态,包括巡逻,攻击,死亡,被击退等。也可以在不同状态中移动怪物的位置,实现怪物自主移动。从而实现了一个简单的怪物AI。
参考了B站视频

相关文章:

  • 2021-07-31
  • 2022-01-21
  • 2021-10-23
  • 2021-04-11
  • 2021-11-17
  • 2021-06-09
  • 2021-11-13
猜你喜欢
  • 2021-06-22
  • 2022-12-23
  • 2021-05-15
  • 2021-10-31
  • 2021-11-12
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案