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

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

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

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

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

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

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

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

里面的TransitionState是用来转移状态

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

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

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

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

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

posted @ 2021-06-28 18:48  宋大帅  阅读(299)  评论(2编辑  收藏  举报