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