Zh/NPC Sensing: Difference between revisions
< Zh
Jump to navigation
Jump to search
No edit summary |
No edit summary |
||
Line 22: | Line 22: | ||
=== 键值 === | === 键值 === | ||
==== Squad | ==== Squad Name/小队名 ==== | ||
有相同的小队名(以及相匹配小队名)的NPC会共享敌人信息,并且会采取轮番攻击以及掩护彼此等策略(取决于AI能力)。 | |||
==== Sleep | ==== Sleep State/睡眠状态 ==== | ||
''睡眠状态将让npc停滞直到指定的条件达成'' | ''睡眠状态将让npc停滞直到指定的条件达成'' | ||
睡眠状态将阻止NPC渲染与思考(think) ,并且它会等待''Wake''输入或特定条件的达成。 | 睡眠状态将阻止NPC渲染与思考(think) ,并且它会等待''Wake''输入或特定条件的达成。 | ||
睡眠的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输入,小队成员(须设置''唤醒小队''标识),唤醒半径(见下方)。 | ||
* '''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.''' | ||
距离值distance为非0时, 玩家一进入该距离内NPC就会唤醒。距离唤醒与条件唤醒互补,不会覆盖它们。 | |||
==== Wake Squad ==== | ==== Wake Squad/唤醒小队 ==== | ||
如果设置'''"Yes"''',NPC将自动唤醒所有小队成员。 | |||
=== Flags === | === Flags/标识位 === | ||
* '''Wait for Script''' | * '''Wait for Script''' | ||
: | : 不同于睡眠状态. | ||
: | : NPC只会在脚本运行后被激活,例如 [[scripted_sequence]] 和 [[aiscripted_schedule]]。这意味着一开始NPC不认识敌人。这可以被用来让NPC待在原地直到脚本触,在脚本完成后,NPC离开等待状态。注意,当NPC被攻击后也会离开等待状态。 | ||
* '''Wait Till Seen''' | * '''Wait Till Seen''' | ||
: | : NPC仅仅在玩家看见NPC后才被激活,“被玩家看见”测试似乎没有使用进入玩家FOV的方案。 | ||
=== I/O for NPC scripting === | === I/O for NPC scripting/NPC脚本I/O === | ||
* '''BaseNPC Input : "Wake" :''' | * '''BaseNPC Input : "Wake" :''' 如果NPC在睡眠状态,唤醒它。 | ||
* '''BaseNPC Input : "UpdateEnemyMemory" (targetname) :''' | * '''BaseNPC Input : "UpdateEnemyMemory" (targetname) :''' 更新NPC对自身目标的记忆.在对NPC新增敌对目标时有用, 比如!player。 | ||
* '''BaseNPC Output : "OnSleep" :''' | * '''BaseNPC Output : "OnSleep" :''' NPC进入睡眠状态后开火。 | ||
* '''BaseNPC Output : "OnWake" :''' | * '''BaseNPC Output : "OnWake" :''' NPC从睡眠状态激活后开火。 | ||
* '''BaseNPC Outputs : "OnFoundPlayer" / "OnFoundEnemy" (targetname) :''' | * '''BaseNPC Outputs : "OnFoundPlayer" / "OnFoundEnemy" (targetname) :''' 当NPC发现玩家/敌人后开火.NPC不能在睡眠状态或者脚本执行中执行改输出。 |
Revision as of 06:28, 26 June 2024
感知是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恰好看向的方向。
- FOV Field of View/视场: 在Source中, NPC的FOV值是 Angular Field of View/角度视场计算的视锥. FOV的边,或者其投影到的一侧代表了视野边缘。(相反,Player的FOV值代表了视锥的水平角FOV,而不是整个视锥。楔体的长方体截面对应着玩家的长方形屏幕)
- 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_sequence 和 aiscripted_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不能在睡眠状态或者脚本执行中执行改输出。