Zh/NPC Sensing: Difference between revisions
< Zh
Jump to navigation
Jump to search
m (Nesciuse moved page NPC Sensing/zh to Zh/NPC Sensing over redirect: Language prefixes) |
m (-Using L template for links) |
||
Line 5: | Line 5: | ||
==概念== | ==概念== | ||
空间化的NPC感知的两个重要概念是PVS和LOS: | 空间化的NPC感知的两个重要概念是PVS和LOS: | ||
* | *{{L|PVS}} '''Potentially Visible Set/潜在可见集''': 一组从NPC{{L|visleaf}}能够见到的visleafs。PVS是用visleafs测量出的空间区域,对于NPC所在位置而言,它是潜在可视区域。如果另一个实体(通常是Player或者NPC)进入这个区域,那么NPC可能考虑做一个视锥测试及视线测试。与{{L|line of sight|LOS}} (Line of Sight)相比,PVS不被props和func_detail笔刷限制,也不限于NPC恰好看向的方向。 | ||
* | *{{L|Viewcone|视锥}}代表NPC目前的空间几何可见范围: 视锥的有效角度是NPC的{{L|FOV}}角度,视锥长轴线的有效长度是NPC的{{L|Range|范围}}。视锥方向由NPC目前的朝向或其角度决定。 视锥的边界代表了NPC的视野边缘。 | ||
:* | :*{{L|Range|范围}}是NPC能够作出识别或反应时,与目标保持的最远距离。如果{{L|FOV}}是视锥的有效范围,那么{{L|Range|范围}}就是视锥的有效深度。这似乎对所有NPC适用;通常为2048个单位。如果'''Long Visibility''' 标记开启, 范围将是无限的, 而'''Think Outside PVS'''标记不影响视锥范围。默认情况下,你从NPC的范围外射击NPC时,它什么也不会做。 | ||
:* | :*{{L|FOV}} '''Field of View/视场''': 在Source中, NPC的FOV值是 '''Angular Field of View/角度视场'''计算的视锥. FOV的边,或者其投影到的一侧代表了视野边缘。(相反,''Player的''FOV值代表了视锥的'''水平角FOV''',而不是整个视锥。楔体的长方体截面对应着玩家的长方形屏幕) | ||
:* | :*{{L|line of sight|LOS}} '''Line of Sight/视线''': 如果一个潜在的目标包含在NPC的视锥中,LOS将用射线测试目标是否藏在另一个物体的后面;LOS会被所有的{{L|Solid|固体}}几何体阻挡(模型、func_detail笔刷等等),除非笔刷/模型有一个{{L|CollisionProperty|SolidMask}}固体蒙版'''NotSolid to LOS/对射线不当作固体''',即''Transparent/透明''。例如(SolidMask:Grate/固体蒙版:架子,对子弹与LOS而言不是固体,还有防弹玻璃等....) | ||
* | *{{L|PAS}} '''Potentially Audible Set/潜在声音集''': PVS是用visleafs测量出的空间区域,在这个区域内的声源NPC可能听得到。与视野不同,听觉不受限于有方向的视锥。 | ||
==NPC 配置== | ==NPC 配置== | ||
Line 35: | Line 35: | ||
* '''sleepstate = 1 : Waiting for threat''' | * '''sleepstate = 1 : Waiting for threat''' | ||
: NPC初始即睡眠状态。一旦建立威胁 | : NPC初始即睡眠状态。一旦建立威胁{{L|LOS}},NPC将被唤醒。 | ||
: LOS测试是独立于NPC | : LOS测试是独立于NPC{{L|Viewcone}}的。只要NPC与威胁之间可以画出一条线,那么NPC将被唤醒。 | ||
: 这个设置可以让NPC纳入视野。例如在转角的情况。 | : 这个设置可以让NPC纳入视野。例如在转角的情况。 | ||
: {{clarify}}: 除了敌人之外,什么构成''威胁''? | : {{clarify}}: 除了敌人之外,什么构成''威胁''? | ||
* '''sleepstate = 2 : Waiting for PVS''' | * '''sleepstate = 2 : Waiting for PVS''' | ||
: NPC初始即睡眠状态。一旦玩家进入NPC的 | : NPC初始即睡眠状态。一旦玩家进入NPC的{{L|PVS}},NPC将被唤醒。 | ||
: 根据世界几何体的情况, NPC可以被很早的唤醒。但应该确保NPC不会突然出现在视野内。 | : 根据世界几何体的情况, NPC可以被很早的唤醒。但应该确保NPC不会突然出现在视野内。 | ||
Line 65: | Line 65: | ||
* '''Wait for Script''' | * '''Wait for Script''' | ||
: 不同于睡眠状态. | : 不同于睡眠状态. | ||
: NPC只会在脚本运行后被激活,例如 | : NPC只会在脚本运行后被激活,例如 {{L|scripted_sequence}} 和 {{L|aiscripted_schedule}}。这意味着一开始NPC不认识敌人。这可以被用来让NPC待在原地直到脚本触,在脚本完成后,NPC离开等待状态。注意,当NPC被攻击后也会离开等待状态。 | ||
* '''Wait Till Seen''' | * '''Wait Till Seen''' |
Latest revision as of 09:58, 11 July 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不能在睡眠状态或者脚本执行中执行改输出。