使用设计模式状态模式有穷状态机编写简单怪物AI
使用设计模式状态模式有穷状态机编写简单怪物AI
简单的游戏怪物AI
有穷状态机:有穷状态机的作用是描述对象在它的生命周期内所经历状态序列,以及如何响应来自外界的事件。有穷状态机首先包含一个有限状态的集合,还包含了从一个状态到另外一个状态的转换。
这是一个有穷状态机的例子:
这是一个unity里动画控制器的例子:
是不是有些像,其实动画器就是个有穷自动机,所以我们可以把状态和动画联系起来,一个怪物通过不同的状态来调用不同的动画,达到一个简单的AI效果
这是我刚写的一个Idlestate状态它对应上图的idle动画,实现一个统一的状态接口,上面的三个函数就是实现的接口函数,分别是进入状态,更新状态,退出状态,每一个状态都会有这样的一个状态类。
这是一个有穷状态机,先用字典把所有的状态注册,Start()函数的前两行。
里面的TransitionState是用来转移状态
这样就实现了一个怪物不同状态对应不同的动画,实现在脚本中改变怪物的动画。
我们只需要考虑哪些事件出现时改变状态
我这里在这个怪物里声明了一个子物体area,设置他的碰撞边界(绿色方框),当有人触碰到边界时他的状态,从idle变为attack
这是FSM里的代码,当有player碰撞到边界时,parameter.target不再为空,就变换状态。
上面只是举一个简单里例子,你可以实现很多种状态,包括巡逻,攻击,死亡,被击退等。也可以在不同状态中移动怪物的位置,实现怪物自主移动。从而实现了一个简单的怪物AI。
参考了B站视频