什么是游戏AI?
游戏AI主要关注实体根据当前条件采取的行动,在传统人工智能文献中被称为“智能代理”,智能代理需要观察环境,做出决策,采取行动,即“感知/思考/行动”循环:
- 感知:代理侦测或被告知环境中可能影响其行为的事物。
- 思考:代理决定采取的应对措施。
- 行动:代理将先前的决定付诸行动。
游戏世界中的AI,大部分情况是模拟,“感知”部分会较为简单。
决策树
即通过感知获得到的输入,经过各个节点进行判断,最后来到叶节点,找到要做出的最终决定。
简单来说,可能就是一堆if。
这方面最好做到代码和数据分离,给策划或设计师提供好工具。
有限状态机(FSM)
某个AI代理目前可能处在几种可能的状态当中,它可以从一个状态转移到另一个状态,而且这些状态的数量有限。
可以用状态转换表或者绘制图表来表示各个状态到其它状态的转换条件。
可以对有限状态机进行分层优化,即分层有限状态机(HFSM),对状态进行分组,归类出主状态和子状态,避免过多的重复“思考”。
缺陷:
- 状态类之间互相依赖很严重,耦合度高。(后期可能会变成一张乱成线团的大网)
- 结构不灵活,可扩展性不高,难以脚本化/可视化。
行为树(BT)
行为树是一棵用于控制 AI 决策行为的、包含了层级节点的树结构。
行为树的开发过程是高度可迭代的。
一个理想的系统应该将决策过程和状态本身分离,这样你只需要在一个位置进行更改,仍然能够正确转换状态,这就是行为树的应用场景。
节点的返回值:true,false,running
行为树(Behavior Tree)具有有4大类型的Node:
- Composite Node 组合节点
- Decorator Node 修饰节点
- Condition Node 条件节点(叶节点)
- Action Node 动作节点(叶节点)
优点:
- 行为逻辑和状态数据分离,任何节点写好以后可以反复利用
- 重用性高,可用通过重组不同的节点来实现不同的行为树
- 呈线性的方式扩展,易于扩展
- 可配置,把工作交给designer
- 缺点:
- 每一帧都从root开始,有可能会访问到所以的节点,相对State Machine消耗更多的cpu
- 任何一个简单的操作都必须要使用节点
A*寻路算法
- 当前代价:即来到“该点”所需要的最短步数。
- 预估代价:即“该点”到目的的距离
- 有两种求法:欧拉距离(两点之间直线距离),曼哈顿距离(水平和竖直距离的相加)
- 总代价:即当前代价加上预估代价。
- 步骤:先遍历周围网格(即先进行一次广度),存入数组中,随后求min最小总代价的其中一个,如果相同则选择预估代价最小的一个(可以优先队列一次性解决),再以这个作为新的起点,重复以上步骤。