realwusang
Articles29
Tags9
Categories7
游戏开发中的人工智能part2

游戏开发中的人工智能part2

以势函数实现移动

势函数的优点:

  1. 只用一个函数处理追逐和闪躲
  2. 操作简单,只需要计算两个单位间的驱动力

势函数的缺点:
单位数量增多时,一旦彼此互动起来将耗用大量CPU资源

Lenard-Jones函数:分子间的引力和斥力

通过调整引力和斥力的参数

优化方法:

  1. 对于障碍物避开算法,对于相距较远的障碍物,可以不去计算势能;
  2. 将游戏领域分成网络,每一个格子都配置一个数组,来存储落在这个格子里面的障碍物数据。
  3. 也可以用这种网格方法,对成群结队算法做最佳化工作。

基本路径寻找及航点应用

解决各种类型的路径寻找问题的办法与需求细节有关

例如:目的地会静止还是移动?有无障碍物?地形如何?最短路径是最佳方法吗?角色有无目的地?角色是否要在游戏环境中看似聪明地四处移动或探索(移动模式)?

基本路径寻找

  • 追逐算法,沿对角线移动
  • 视线追逐函数

避开障碍物

  • 随机移动(视线追逐或者对角线移动)
  • 绕行 何时停止绕行
  • 改良绕行 整合视线算法

面包屑寻找路径

每次玩家走一步时,都会毫无所知地在游戏世界中留下看不见的标记即面包屑。

面包屑算法是计算机控制角色成群移动的有效方式。NPC侦察附近有无玩家留下的面包屑,再顺着面包屑移动。

遵循路径走

NPC分析周围地形,分析可能的方向,把不属于道路的部分剔除。

分析出可能方向后,考虑各个方向的权重。

沿着墙走

左侧/右侧移动法(适合迷宫)

航点导航

在游戏环境中置放节点,然后使用预先计算好的路径,或简单的路径寻找方法在节点中移动。

每个节点都至少应该让另一个节点的实现看见。对于以这种方式构成的游戏环境而言,游戏控制角色能使用简单的视线算法,到达图中的任何地点。

节点表:

A星算法

一、定义搜寻区域

1. 简化连续环境的搜索区域

砖块环境的游戏就是此算法的合适对象

2. 开始搜寻

伪代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
把起始节点加进open list  
while (open list 不空)
{
当前节点 = open list中成本最低的节点
if (当前节点 == 目标节点)
{
路径完成
从目标节点开始寻找其母节点,直到母节点是起始节点位置,得到路径
}
else
{
把当前节点移入到close list
检视当前节点的每个相邻节点
for (每个相邻节点)
{
if (该节点不在open list中 and 该节点不在closed list中 and 该节点不是障碍物) {
把该节点移进open list
计算其成本
记录该节点的母节点为当前节点
}
}
}
}
if (还没有找到路径)
{
无法从起始点到达目的地
}

思路

先从起始节点开始搜寻,然后再分别去搜寻周围节点(扩散搜索,从一点开始向外辐射)直至到达目的地。

记分

我们替任何指定砖块记分公式是f(n)=g(n)+h(n)

  • f(n) 是从初始状态经由状态n到目标状态的移动成本的估计函数
  • g(n) 是在从初始状态到状态n的实际移动成本
  • h(n) 是从状态n到目标状态的的移动成本的估计

h(n)的选取

我们以 d(n) 表达状态 n 到目标状态的实际距离,那么 h(n) 的选取大致有如下三种情况:

  • 如果 h(n)< d(n) 到目标状态的实际距离,这种情况下,搜索的点数多,搜索范围大,效率低。但能得到最优解。
  • 如果 h(n)=d(n),即距离估计 h(n )等于最短距离,那么搜索将严格沿着最短路径进行, 此时的搜索效率是最高的。
  • 如果 h(n)>d(n),搜索的点数少,搜索范围小,效率高,但不能保证得到最优解。

g(n)的值可以告诉我们目标节点与起始节点之间,隔了几个母节点。

没怎么看懂

搜寻死路

地形成本

f(n)=g(n)+h(n)+地形成本

影响力对应

改变节点成本的方法,根据游戏里发生的情节而定

比如玩家在某一节点杀害了N只蜘蛛,该节点就会在成本上增加值,别的蜘蛛就会有意绕过这里。

描述式AI及描述引擎

通过描述机制改变对手的属性、行为、响应方式以及游戏事件。

描述机制技巧

描述对手属性

利用某种描述机制,指定每个AI对手的所有基本属性

描述对手行为

描述口语互动

*”I’m Groot!”*

搜寻玩家关键字

描述事件

脚本如何触发与AI角色可能不太有直接关联的游戏事件

比如:站在一个特定地点上会触发陷阱

最后还有个触发音效脚本

有限状态机

有限状态机是一种抽象机制,是处在各种不同的预定状态下的其中一种状态。有限状态机也可以定义一组条件,以确认何时应该改变状态。实际的状态会决定状态机的行为。