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