文章目录
【第一章】MMORPG AI基础
1)MMORPG AI简介
- 简介
游戏内NPC能够通过环境或者事件的变化进行逻辑判断,从而与玩家进行特定的行为交互,主要包括以下三个阶段
- MMORPG AI架构
- AI主要实现的方式
1)朴素的AI-HardCode
2)有限状态机
3)行为树
2)朴素的AI-Hard Code(简单直接、效率很高)
情况展示
- 一个简单例子(if-else可以做)
+ 更复杂的情况
面临的问题
几乎需要为每一种NPC单独实现一份AI,一款游戏有几百种NPC,工作量巨大,所以难以扩展和维护
3)有限状态机
-
概念
状态机可归纳为3个要素,即现态、事件、动作
现态:指当前所处的状态
事件:当一个事件发生,将会触发一个动作,或者执行一次状态的迁移(发生事件就会转变状态)
动作:条件满足后执行的动作 -
状态迁移图举例
-
补充:
每个状态至少有三个接口函数
Enter(): 进入状态的时候做一些初始化的工作,做一些特殊化的事情
Exit() :退出状态需要执行的一些事情
Handle() : 接收事件,也就是事件处理函数,在这个函数里面我们可能会触发一个动作,或可能导致一个状态迁移
- 状态迁移表
- 前面的例子转换成状态迁移表
- 接口实现原则(子类实现基类的虚函数就行)
- 缺点
如果要新加一个状态,需要考虑这个状态其他所有状态的一个关系,就是哪些状态可以切换到我,我也可以切换到哪些状态去,这个工作量特别巨大。(所以说每加一个状态工作量非常巨大,他是一个N对一的关系
)
总结
1)状态流转图过于复杂,难以维护
2)新加状态需要考虑与已有状态间的关系,难以扩展
3)策划不能充分的参与其中,只能由程序来完成
4)行为树
- 概念
1)节点分为:控制节点
、条件节点
、行为节点
2)条件节点、行为节点执行都有一个结果(BOOL值:成功TRUE、失败FALSE、运行中RUNINNG)
3)控制节点根据返回结果执行下一步动作
- 行为树控制节点分类
选择节点:找到一个节点返回结果为TRUE就返回了
序列节点:将所有子结点依次执行,是一个与
的关系,碰到第一个条件判断为假
的就返回(就是碰到假的就会返回false)
-
补充
1)一般会在行为节点前面放条件节点,满足这个条件才会去执行 -
野猪行为树例子
1)这里的根节点下面的节点是条件节点和条件,满足条件就走这个条件节点
2)条件节点一般都是配合控制节点
- 小鹿行为树
- 真实游戏行为树的样子
- 行为树优缺点(效率是最低的,树的分支非常庞大)
- 行为树
优化
(出生、死亡都是一样大,但是战斗不一样)
把战斗的行为树放到战斗状态机下面,也就是将战斗部分的行为树裁剪出来,更快找到并执行