Zh/NPC Sensing: Difference between revisions

From Valve Developer Community
< Zh
Jump to navigation Jump to search
No edit summary
No edit summary
Line 22: Line 22:
=== 键值 ===
=== 键值 ===


==== Squad Name小队名 ====
==== Squad Name/小队名 ====
NPCs有相同的小队名(以及相匹配的小队名)会共享敌人信息,并且会采取轮番攻击以及掩护彼此(取决于AI能力)。
有相同的小队名(以及相匹配小队名)的NPC会共享敌人信息,并且会采取轮番攻击以及掩护彼此等策略(取决于AI能力)。


==== Sleep State睡眠状态 ====
==== Sleep State/睡眠状态 ====
''睡眠状态将让npc停滞直到指定的条件达成''
''睡眠状态将让npc停滞直到指定的条件达成''


睡眠状态将阻止NPC渲染与思考(think) ,并且它会等待''Wake''输入或特定条件的达成。
睡眠状态将阻止NPC渲染与思考(think) ,并且它会等待''Wake''输入或特定条件的达成。
睡眠的NPC也不会播放无用的声响。出于性能原因,让NPC作为地图未激活的一部分进入睡眠状态很寻常。
睡眠的NPC也不会播放闲置的声响。出于性能原因,让NPC作为地图未激活的一部分而进入睡眠状态是常见的技术。


* '''sleepstate = 0 : None (default)'''
* '''sleepstate = 0 : None (default)'''
Line 38: Line 38:
: LOS测试是独立于NPC[[Viewcone]]的。只要NPC与威胁之间可以画出一条线,那么NPC将被唤醒。
: LOS测试是独立于NPC[[Viewcone]]的。只要NPC与威胁之间可以画出一条线,那么NPC将被唤醒。
: 这个设置可以让NPC纳入视野。例如在转角的情况。
: 这个设置可以让NPC纳入视野。例如在转角的情况。
: {{clarify}}: 除了敌人之外什么构成''威胁''?
: {{clarify}}: 除了敌人之外,什么构成''威胁''?


* '''sleepstate = 2 : Waiting for PVS'''
* '''sleepstate = 2 : Waiting for PVS'''
Line 45: Line 45:


* '''sleepstate = 3 : Waiting for input, ignore PVS'''
* '''sleepstate = 3 : Waiting for input, ignore PVS'''
: NPC初始即睡眠状态。NPC仅可以被外部输入唤醒,例如wake输入,小队成员(须有''唤醒小队''集),唤醒半径(见下方)。
: NPC初始即睡眠状态。NPC仅可以被外部输入唤醒,例如wake输入,小队成员(须设置''唤醒小队''标识),唤醒半径(见下方)。


* '''sleepstate = 4 : Auto PVS'''
* '''sleepstate = 4 : Auto PVS'''
Line 54: Line 54:
: NPC初始即睡眠状态。在首次建立'PVS接触'时,它将进入自动PVS模式。
: NPC初始即睡眠状态。在首次建立'PVS接触'时,它将进入自动PVS模式。


==== Wake Radius ====
==== Wake Radius/唤醒半径 ====
'''Auto-wake if player within this distance.'''
'''Auto-wake if player within this distance.'''


If non-zero, this wakes the NPC as soon as the player is within this distance. Waking by distance complements the ''Sleep State'' waking conditions, it does not override them.
距离值distance为非0时, 玩家一进入该距离内NPC就会唤醒。距离唤醒与条件唤醒互补,不会覆盖它们。


==== Wake Squad ====
==== Wake Squad/唤醒小队 ====
If set to '''"Yes"''', the NPC automatically wakes all squad mates when waking up.
如果设置'''"Yes"''',NPC将自动唤醒所有小队成员。


=== Flags ===
=== Flags/标识位 ===
* '''Wait for Script'''
* '''Wait for Script'''
: Not the same as sleeping.  
: 不同于睡眠状态.  
: The NPC's Sensing only becomes active after playing a script such as [[scripted_sequence]] or [[aiscripted_schedule]]. That means it will initially not acquire enemies. This can be used to keep the NPC in place before triggering the script. After the script has been completed, the NPC leaves the waiting state. The same happens when the NPC is being attacked.
: NPC只会在脚本运行后被激活,例如 [[scripted_sequence]] [[aiscripted_schedule]]。这意味着一开始NPC不认识敌人。这可以被用来让NPC待在原地直到脚本触,在脚本完成后,NPC离开等待状态。注意,当NPC被攻击后也会离开等待状态。


* '''Wait Till Seen'''
* '''Wait Till Seen'''
: The NPC's Sensing only becomes active after the Player has seen the NPC. The "seen by player" test does not seem to use the Player's entire FOV.
: NPC仅仅在玩家看见NPC后才被激活,“被玩家看见”测试似乎没有使用进入玩家FOV的方案。


=== I/O for NPC scripting ===
=== I/O for NPC scripting/NPC脚本I/O ===
* '''BaseNPC Input : "Wake" :''' Wakes up the NPC if it is sleeping.
* '''BaseNPC Input : "Wake" :''' 如果NPC在睡眠状态,唤醒它。
* '''BaseNPC Input : "UpdateEnemyMemory" (targetname) :''' Updates the NPC's memory of the specified target. Useful for making NPCs aware of an enemy, such as !player.
* '''BaseNPC Input : "UpdateEnemyMemory" (targetname) :''' 更新NPC对自身目标的记忆.在对NPC新增敌对目标时有用, 比如!player。
* '''BaseNPC Output : "OnSleep" :''' Fired when this NPC enters a sleep state.
* '''BaseNPC Output : "OnSleep" :''' NPC进入睡眠状态后开火。
* '''BaseNPC Output : "OnWake" :''' Fired when this NPC comes out of a sleep state.
* '''BaseNPC Output : "OnWake" :''' NPC从睡眠状态激活后开火。
* '''BaseNPC Outputs : "OnFoundPlayer" / "OnFoundEnemy" (targetname) :''' Fired when the NPC finds the player / an enemy. NPC must not be sleeping or scripting for this to work.
* '''BaseNPC Outputs : "OnFoundPlayer" / "OnFoundEnemy" (targetname) :''' 当NPC发现玩家/敌人后开火.NPC不能在睡眠状态或者脚本执行中执行改输出。

Revision as of 06:28, 26 June 2024

English (en)中文 (zh)Translate (Translate)

感知是NPC思考流程的第一阶段。此阶段,NPC将产生可见、可听的实体列表。NPC会忽略它不关心的实体与声响。


待完善: 更多感知(实体与声响)相关的详细说明有助于理解

概念

空间化的NPC感知的两个重要概念是PVS和LOS:

  • PVS Potentially Visible Set/潜在可见集: 一组从NPCvisleaf能够见到的visleafs。PVS是用visleafs测量出的空间区域,对于NPC所在位置而言,它是潜在可视区域。如果另一个实体(通常是Player或者NPC)进入这个区域,那么NPC可能考虑做一个视锥测试及视线测试。与LOS (Line of Sight)相比,PVS不被props和func_detail笔刷限制,也不限于NPC恰好看向的方向。
  • 视锥代表NPC目前的空间几何可见范围: 视锥的有效角度是NPC的FOV角度,视锥长轴线的有效长度是NPC的范围。视锥方向由NPC目前的朝向或其角度决定。 视锥的边界代表了NPC的视野边缘。
  • 范围是NPC能够作出识别或反应时,与目标保持的最远距离。如果FOV是视锥的有效范围,那么范围就是视锥的有效深度。这似乎对所有NPC适用;通常为2048个单位。如果Long Visibility 标记开启, 范围将是无限的, 而Think Outside PVS标记不影响视锥范围。默认情况下,你从NPC的范围外射击NPC时,它什么也不会做。
  • FOV Field of View/视场: 在Source中, NPC的FOV值是 Angular Field of View/角度视场计算的视锥. FOV的边,或者其投影到的一侧代表了视野边缘。(相反,Player的FOV值代表了视锥的水平角FOV,而不是整个视锥。楔体的长方体截面对应着玩家的长方形屏幕)
  • LOS Line of Sight/视线: 如果一个潜在的目标包含在NPC的视锥中,LOS将用射线测试目标是否藏在另一个物体的后面;LOS会被所有的固体几何体阻挡(模型、func_detail笔刷等等),除非笔刷/模型有一个SolidMask固体蒙版NotSolid to LOS/对射线不当作固体,即Transparent/透明。例如(SolidMask:Grate/固体蒙版:架子,对子弹与LOS而言不是固体,还有防弹玻璃等....)
  • PAS Potentially Audible Set/潜在声音集: PVS是用visleafs测量出的空间区域,在这个区域内的声源NPC可能听得到。与视野不同,听觉不受限于有方向的视锥。

NPC 配置

快速概括NPC实体在Hammer中实现各种NPC行为的配置。

键值

Squad Name/小队名

有相同的小队名(以及相匹配小队名)的NPC会共享敌人信息,并且会采取轮番攻击以及掩护彼此等策略(取决于AI能力)。

Sleep State/睡眠状态

睡眠状态将让npc停滞直到指定的条件达成

睡眠状态将阻止NPC渲染与思考(think) ,并且它会等待Wake输入或特定条件的达成。 睡眠的NPC也不会播放闲置的声响。出于性能原因,让NPC作为地图未激活的一部分而进入睡眠状态是常见的技术。

  • sleepstate = 0 : None (default)
NPC生成时不会进入睡眠状态。
  • sleepstate = 1 : Waiting for threat
NPC初始即睡眠状态。一旦建立威胁LOS,NPC将被唤醒。
LOS测试是独立于NPCViewcone的。只要NPC与威胁之间可以画出一条线,那么NPC将被唤醒。
这个设置可以让NPC纳入视野。例如在转角的情况。
[澄清]: 除了敌人之外,什么构成威胁
  • sleepstate = 2 : Waiting for PVS
NPC初始即睡眠状态。一旦玩家进入NPC的PVS,NPC将被唤醒。
根据世界几何体的情况, NPC可以被很早的唤醒。但应该确保NPC不会突然出现在视野内。
  • sleepstate = 3 : Waiting for input, ignore PVS
NPC初始即睡眠状态。NPC仅可以被外部输入唤醒,例如wake输入,小队成员(须设置唤醒小队标识),唤醒半径(见下方)。
  • sleepstate = 4 : Auto PVS
NPC初始即睡眠状态。一旦玩家进入NPC的PVS,NPC将被唤醒。只要离开PVS后,NPC又将进入睡眠状态,这甚至能暂停敌人对玩家的追逐。然而,它们不会忘记自己的目标,一旦被唤醒将继续追逐。
不应该与Wake Radius一同使用。当玩家在唤醒半径,但是又不在PVS时,这可能制造唤醒-睡眠的无限循环。
  • sleepstate = 5 : Auto PVS after PVS
NPC初始即睡眠状态。在首次建立'PVS接触'时,它将进入自动PVS模式。

Wake Radius/唤醒半径

Auto-wake if player within this distance.

距离值distance为非0时, 玩家一进入该距离内NPC就会唤醒。距离唤醒与条件唤醒互补,不会覆盖它们。

Wake Squad/唤醒小队

如果设置"Yes",NPC将自动唤醒所有小队成员。

Flags/标识位

  • Wait for Script
不同于睡眠状态.
NPC只会在脚本运行后被激活,例如 scripted_sequenceaiscripted_schedule。这意味着一开始NPC不认识敌人。这可以被用来让NPC待在原地直到脚本触,在脚本完成后,NPC离开等待状态。注意,当NPC被攻击后也会离开等待状态。
  • Wait Till Seen
NPC仅仅在玩家看见NPC后才被激活,“被玩家看见”测试似乎没有使用进入玩家FOV的方案。

I/O for NPC scripting/NPC脚本I/O

  • BaseNPC Input : "Wake" : 如果NPC在睡眠状态,唤醒它。
  • BaseNPC Input : "UpdateEnemyMemory" (targetname) : 更新NPC对自身目标的记忆.在对NPC新增敌对目标时有用, 比如!player。
  • BaseNPC Output : "OnSleep" : NPC进入睡眠状态后开火。
  • BaseNPC Output : "OnWake" : NPC从睡眠状态激活后开火。
  • BaseNPC Outputs : "OnFoundPlayer" / "OnFoundEnemy" (targetname) : 当NPC发现玩家/敌人后开火.NPC不能在睡眠状态或者脚本执行中执行改输出。