决策总览

From Valve Developer Community
< Zh
Jump to navigation Jump to search
English (en)中文 (zh)Translate (Translate)

从上层应用的角度来看,NPC(en)遵循相当简单(并符合现实逻辑)的决策过程。 想要理解它,最简单的方式就是查看其大纲,之后再进一步挖掘必要的特例情况。

每一次NPC 思考(en), 都会遵照以下的过程:

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