- Create an AI Controller class
- Create a BlackBoard and Behavior Tree
- Add a Blackboard Component and Behavior Tree Component to the AI Controller
- Add a Behavior Tree to the Enemy
- Run the Behavior Tree
Tactical Locations
A Set of Locations
Primitive and Compound Tactics
行为决策对于角色来说有两个重要的限制:
- 用于单个角色
- 不对基于现有的一些信息去预测整个游戏的走向
策略方法从简略的信息中推断出战术形势的方法,使用展示形势作出决定,并且多个角色之间进行调节。
并不是所有的游戏都会有这个模块
Influence Map
给每个角色一个影响力,然后角色处于地图中的某个位置。他就会对他周围的地区产生一些影响。
比如说我们要派一个队AI小兵去抢滩登陆,我们就需要知道敌方的布防,根据这个 布防去规划一条路径。布防敌军是在巡逻,所以点位还不是固定的。我们就不能简单的使用寻路算法,我们就需要做一些预测。
这里就可以用到这个工具,我们先把整个地图映射到2d平面化成格子块。再把每个角色放入到他位置 对应的格子块里。每一个敌方单位都有攻击力,这个就可以作为一个影响范围,覆盖角色周围的 格子。
然后再规划路径时,我们就 把拥有数值的格子当做障碍物即可 。
AI角色在游戏中一般都是一直做一样的事情,直到收到某个信息才会改变角色现在做的事情。这我们就可以使用状态机来制作。
A Basic State Machine
在一个状态中每个角色都有一个状态变量。一个行为对应着一个状态,并且有一系列的条件。当满足状态切换条件时,这个叫做触发(trigger)
,当切换到一个新的状态时,这叫激活(fired)
上图展示了一个简单的状态机:巡逻,战斗,逃跑。每个状态都有自己的一些条件。
询问一个游戏玩家关于游戏AI,他大致会认为说做决策:角色决定去做什么的能力。
实际上,决策制定通常只是构建出色游戏所需工作的一小部分AI。大多数游戏使用简单的决策系统:状态机和行为树。
最近十年也出现了很多精密的方案:模糊逻辑和神经网络。但是在游戏开发中用的并不是很多。
决策制定是中间组件在AI模型中。
可以通过两个方向的信息来:
- 外部信息:在角色周围的游戏环境,角色的位置
- 内部信息:角色的生命值,觉得的目标。
我们现在知道寻路使用图来解决,但是我们的游戏场景并不是由多个节点和节点的连接组成的。那么我们就需要有游戏场景抽象话。
抽象场景的方式叫做划分方案(division schemes)
,每个划分方案都有三个重要的性质:量化/定位(quantization/localization)、分区(generation)和有效性(validity)
Quantization and Localization
在游戏中,角色想要去商店,就需要把角色当前的位置转化到图中节点,同样商店的位置也要转化到图中节点。这个转化过程叫做量化(quantization)
。
寻路在游戏里的等同于A*
算法。跟Dijkstra
不一样,A*
是用于点对点的路径查询而不是解决图中的最短路径问题。
The Problem
给一个图(一个有向非负权重图)和两个点(开始点和目标点),找到俩个点直接连通的一条最短花费的路径。
The Algorithm
这个算法的工作原理跟Dijkstra
差不多。也是使用迭代器来遍历计算。不同的是A*
关注的是最有可能导致总体路径最短的节点,而不是到当前最短花销值的节点。这就会产生如果这节点并不是最有可能产生最短路径的节点,那么A*
的效率并不如Dijkstra
。