Zh/Decision Making Overview: Difference between revisions

From Valve Developer Community
< 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=决策总览}}
从上层应用的角度来看,[[NPC]]遵循相当简单(并符合现实逻辑)的决策过程。 想要理解它,最简单的方式就是查看其大纲,之后再进一步挖掘必要的特例情况。
从上层应用的角度来看,{{L|NPC}}遵循相当简单(并符合现实逻辑)的决策过程。 想要理解它,最简单的方式就是查看其大纲,之后再进一步挖掘必要的特例情况。


每一次NPC [[Think()|思考]], 都会遵照以下的过程:
每一次NPC {{L|Think()|思考}}, 都会遵照以下的过程:


;感知
;感知
:[[NPC_Sensing|NPC感知]] 会产生一个NPC所能看到的实体列表, 以及一个它能够听到的声响列表。并且,NPC会忽略它不关心的实体与声响。
:{{L|NPC_Sensing|NPC感知}} 会产生一个NPC所能看到的实体列表, 以及一个它能够听到的声响列表。并且,NPC会忽略它不关心的实体与声响。
;生成条件列表
;生成条件列表
:[[Condition|条件]] 是一串NPC用于做决策的关键信息。 它们提取于所感知到的实体、声响以及world与NPC的状态。列举一些可能的条件:
:{{L|Condition|条件}} 是一串NPC用于做决策的关键信息。 它们提取于所感知到的实体、声响以及world与NPC的状态。列举一些可能的条件:
:*我看见了敌人
:*我看见了敌人
:*我正承受伤害
:*我正承受伤害
:*弹夹已空
:*弹夹已空
;切换合适状态
;切换合适状态
:[[State|状态]] 是基于<!-- global?-->条件列表总体评估的。例如:
:{{L|State|状态}} 是基于<!-- global?-->条件列表总体评估的。例如:
:*NPC视野存在可见敌人时将进入''Combat''状态
:*NPC视野存在可见敌人时将进入''Combat''状态
:*NPC认为不存在敌人时将进入''Alert''状态
:*NPC认为不存在敌人时将进入''Alert''状态
:*NPC血量为0时将进入''Dead''状态
:*NPC血量为0时将进入''Dead''状态
;适时选择行程  
;适时选择行程  
:[[Schedule|行程]]是NPC将采取的行动总和, 它被拆为多个任务(见下方)被NPC实际执行。 行程的选择基本取决于NPC的状态与条件. 例子如下:
:{{L|Schedule|行程}}是NPC将采取的行动总和, 它被拆为多个任务(见下方)被NPC实际执行。 行程的选择基本取决于NPC的状态与条件. 例子如下:
:*我将寻找掩护并换弹
:*我将寻找掩护并换弹
:*我将追逐我的敌人
:*我将追逐我的敌人
Line 23: Line 23:
:NPC切换到新行程的原因有两个:
:NPC切换到新行程的原因有两个:
:#完成了前一个行程
:#完成了前一个行程
:#产生了一个条件,而这个条件被这个行程指定为 [[Interrupt]]
:#产生了一个条件,而这个条件被这个行程指定为 {{L|Interrupt}}
;执行当前任务
;执行当前任务
:[[Task|任务]]是行程的组件,可称为离散动作。要想完成一个行程,任务必须一个接一个地执行。 例如, 行程 "我将寻找掩护并换弹" 将被拆为以下任务:
:{{L|Task|任务}}是行程的组件,可称为离散动作。要想完成一个行程,任务必须一个接一个地执行。 例如, 行程 "我将寻找掩护并换弹" 将被拆为以下任务:
:#找到掩护点
:#找到掩护点
:#产生到掩护点的路径
:#产生到掩护点的路径

Latest revision as of 09:46, 11 July 2024

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每次思考都会不停地执行任务,直到该任务完成。 接着,它会执行当前行程的下一个任务, 或者,当没有任务剩余时会跳到下一个行程. 如果任务失败了,那么行程也会立即失败。(存疑)