决策总览
< Zh
从上层应用的角度来看,NPC 遵循相当简单(并符合现实逻辑)的决策过程。 想要理解它,最简单的方式就是查看其大纲,之后再进一步挖掘必要的特例情况。
每一次NPC 思考 , 都会遵照以下的过程:
- 感知
- NPC感知 会产生一个NPC所能看到的实体列表, 以及一个它能够听到的声响列表。并且,NPC会忽略它不关心的实体与声响。
- 生成条件列表
- 条件 是一串NPC用于做决策的关键信息。 它们提取于所感知到的实体、声响以及world与NPC的状态。列举一些可能的条件:
- 我看见了敌人
- 我正承受伤害
- 弹夹已空
- 切换合适状态
- 状态 是基于条件列表总体评估的。例如:
- NPC视野存在可见敌人时将进入Combat状态
- NPC认为不存在敌人时将进入Alert状态
- NPC血量为0时将进入Dead状态
- 适时选择行程
- 行程 是NPC将采取的行动总和, 它被拆为多个任务(见下方)被NPC实际执行。 行程的选择基本取决于NPC的状态与条件. 例子如下:
- 我将寻找掩护并换弹
- 我将追逐我的敌人
- 我将转移到能够看到敌人的位置
- NPC切换到新行程的原因有两个:
- 完成了前一个行程
- 产生了一个条件,而这个条件被这个行程指定为 Interrupt
- 执行当前任务
- 任务 是行程的组件,可称为离散动作。要想完成一个行程,任务必须一个接一个地执行。 例如, 行程 "我将寻找掩护并换弹" 将被拆为以下任务:
- 找到掩护点
- 产生到掩护点的路径
- 沿着路径行走
- 换弹
- 像上面的任务一样,许多任务都会花时间执行, 所以NPC每次思考都会不停地执行任务,直到该任务完成。 接着,它会执行当前行程的下一个任务, 或者,当没有任务剩余时会跳到下一个行程. 如果任务失败了,那么行程也会立即失败。(存疑)