原型与威胁定位
Archetype & Threat Role污染变异体是收容失效的副产物(非完整 SCP):真菌感染源自 L2 菌丝母体、蔓延上层。设计定位为基准威胁单位(baseline / tutorial threat)——验证「武器可解 · 命中施加污染 · 掉落普通材料」三条核心。一切权威逻辑 服务器权威 · server-authoritative,客户端仅做表现。
原型 Archetypes
Basic 均衡冲锋型(移速 400)· Brute 重型高韧、感知迟钝(300、听觉短)· Stalker 潜行型、听觉敏锐(150、听程远)。原型差异 = 数据分化(EnemyDefinitions.csv 一行一原型),同一行为内核 + 不同参数,不分叉资产。
无血条 No Health Bar
刻意取消血量 UI(写实压迫感,设计拍板)。玩家通过姿态 / 受击踉跄 / 命中反馈强度读取状态,即诊断式反馈(diegetic feedback)而非数值条。
威胁哲学 Threat Design
敌人是潜行 · 声学 · 走位(移动站位)的遭遇谜题(encounter puzzle),而非射击场上的固定靶。绕背、压低噪音足迹、控制交战距离 = 主解法。
掉落 Loot
仅普通材料(变异组织 / 污染残留,占位中);关键样本 / 路线 / 结局变量绝不进掉落表。尸体可搜刮(搜刮揭示 · search-to-reveal),可选地面散落。
✅ 核心链路 A–G 已 PIE ✅ 数据驱动 Data-A ✅ 尸体搜刮 Enemy-F 🔶 听觉 / 步态 / 巡逻 / 发声 / 血效 待 PIE
感知系统
Perception — Sight · Hearing · Aggro基于 UE AIPerception 的多感官感知(multi-sense perception):视觉 + 听觉两路独立刺激(stimulus),外加「受创即仇恨」旁路。声学足迹(acoustic footprint)是玩家可操纵的核心隐匿变量。
视觉 VISUAL视觉感知 Sight
视野锥 · sight cone / FOV(半角 ~60°)+ 视线检测 · line-of-sight, LoS,仅对玩家 Pawn。参数:SightRadius 1200 / LoseSightRadius 1400(迟滞)/ SightMaxAge 失察时效。命中即进追击。正面有盲区可绕背 flanking、转角可破 LoS。
听觉 AUDIO听觉感知 Hearing
全向。判定式:可闻 ⇔ 距离 ≤ HearingRange × 噪音响度(loudness)。Basic 1500 / Brute 1200 / Stalker 2800。触发调查(investigate)而非直接追击。
噪音模型 Noise Model
玩家 UCSNoiseEmitterComponent 发噪音事件 · noise event,响度按运动态:潜行 0.2 / 步行 0.5 / 疾跑 1.0 / 静止 0;枪声 2.5(ReportGunshotNoise)。响度直接缩放听觉半径 = 隐匿杠杆(stealth lever)。
仇恨 Aggro
受创即强制仇恨(强制锁定 · force-aggro):背袭 / 视野外受击也立即锁定攻击者并进追击——无「无敌帧式无视」。
🔶 听觉 + 调查 Enemy-H 待 PIE · 调试可视化 cs.ai.DrawPerceptionDebug 1(视野锥 / 听觉半径 / 调查点)
AI 状态机
Finite State Machine — 5 States大脑 ACSEnemyAIController = 有限状态机(FSM;状态多后迁 行为树 / 状态树 · Behavior Tree / StateTree)。完整战斗循环:巡逻 → 调查 → 追击 → 穷追 → 脱战返回。
状态规格 State Specs
Idle · 巡逻 / 游荡(Patrol/Wander)
以出生点 驻地锚点 · home anchor(HomeLocation)为圆心、WanderRadius 600 内取可达随机点(navmesh reachable point),WanderSpeedFraction 0.2 悠闲移动,到点驻留 WanderPauseSeconds 3s 再取下一点。
Investigating · 调查(Investigate)
噪音事件 / 视线丢失触发:InvestigateSpeedFraction 0.5 谨慎趋近 → 到点原地搜视 InvestigateHoldSeconds 3s;途中获视 → 升级追击;总超时 InvestigateMaxSeconds 8s 无果 → 回 Idle。
Chasing · 追击(Chase)
获视即触发锁定预警 · aggro telegraph:先转正朝向 + 嘶吼(可读前摇)→ 停顿后全速直取。ChaseUpdateInterval 0.25s 刷新目标点。
Pursuing · 穷追 / 搜索(Pursuit)
追击中丢失视线 → 保持仇恨 + 全速冲最后已知位置 · Last Known Position, LKP,持续 PursuitGraceSeconds 3s 的宽限期(grace period);窗口内复获视 → 回追击;到点 / 超时 → 降级调查。
Returning · 脱战返回(Leash / Reset)
追击中自身离驻地 > LeashRadius 2500(牵引半径 · leash / tether radius)→ 放弃、有目的性返回(ReturnSpeedFraction 0.6)。返程默认不被动重警戒(避免 leash 边界抖动);但玩家进 ReturnReaggroRadius 600 被获视、或对其造成伤害(force-aggro)仍打断重战(re-aggro)。到点 → Idle。效果:玩家可经拉开距离 / 破 LoS / 脱离牵引半径实现脱战(disengage / lose aggro),非无限追杀。
🔶 巡逻 + 脱战 Patrol-A 待 PIE 🔶 穷追宽限 AI-Chase-Config 待 PIE · 依赖场景 NavMeshBoundsVolume(导航网格)。
运动与姿态
Locomotion & Stance速度驱动(speed-scaled)的单一混合空间 · BlendSpace,叠一个姿态布尔(stance flag)在「平静 / 攻击性」两套移动姿态间混合。步态由参数分化,不为每原型分叉动画集。
步态 = 原型身份 Gait
移速绑定 EnemyId、恒定不变:Stalker 150 潜行步 / Brute 300 重型慢跑 / Basic 400 冲刺。单关节奏差异 = 混编不同原型。
姿态 = 状态布尔 Stance
追击 bIsAggressive=true(攻击性 Offensive);调查 / 待机 =false(平静 Normal)。状态机切换处统一设置并复制驱动动画混合。姿态是游戏状态布尔,非行为模型。
动画 ANIM足步匹配 Foot Sync
BlendSpace 启用 axis_to_scale=Speed,采样点按各动作天然脚速(authored foot speed)摆放,运行速度落上去自动对齐步频 → 消除滑步 · foot sliding。实测天然速率:平静走≈50 / 攻击走≈72 / 攻击跑≈267 cm/s;平静态速度应控在 ~1.5× 基准内,超出会被 retime 放大致漂浮。
🔶 步态多样化 + 姿态 Locomotion-B 待 PIE(AnimGraph 的 Blend Poses by bool 待手动接)
StopMovementImmediately 强制停止消除。近战攻击
Melee Attack趋近至射程内发起近战。命中判定(hit detection)由动画的激活帧 · active / hit frame 经 AnimNotify 精确触发,非按键瞬时;单次攻击一击一判(去重)。
攻击流程 Attack Loop
进射程(AttackRange ~180)→ 强制停步定身 + 转正朝向 → 随机选段播放。命中帧由 UCSAnimNotify_EnemyMeleeHit 卡帧(无 notify 的变体走 AttackHitTimeFraction 0.45 兜底定时器),bHitAppliedThisAttack 保证一击一判。攻击节奏 · cadence / cooldown ~1.6s。
命中结算 On-Hit
伤害先过玩家减伤 · damage mitigation(MitigateDamage)再扣血,并对玩家施加增益/减益(apply debuff,Buff_Bleed_Light 等)——即「命中施加污染」落点。
动画 ANIM攻击变体 Variation
Atk01–03 攻击变体(attack variation)每次随机选段,服务器选定下发各端保持一致,避免单一挥击循环。
音频 AUDIO攻击吼 Attack Vocal
🔶 新 每次攻击附攻击吼(接攻击动作多播,各端可闻)。详见 §08 发声。
✅ 近战攻击 Enemy-C 已 PIE ✅ 攻击多样化 Enemy-G 🔶 攻击吼 Audio-A 待 PIE
受击反馈与硬直
Hit Reaction & Hitstun受击反应(hit reaction)按方向 × 部位 × 力度选择动画,并进入短硬直 · hitstun /踉跄 · stagger。高频伤害经节流(throttle)避免反复锁定。
反应选择 Reaction Select
命中方向(前/后/左/右,按攻击者相对朝向)× 命中部位(头 / 身)× 力度(伤害 ≥ HeavyHitDamageThreshold 25 = 重击)。头部命中优先专用动画;缺段逐级退化至正面身体反应。
弱点 Weak Point
命中头/颈(命中盒 · hitbox 骨名含 head/neck,或按命中点高度近似)套弱点倍率 · weak-point / headshot multiplier:Basic ×2.0 / Brute ×1.5 / Stalker ×2.5(数据驱动,GetIncomingDamageMultiplier)。
硬直 / 节流 Hitstun
受击短硬直 MaxStaggerSeconds 0.5s(期间停止趋近,防滑步);两次受击反应最小间隔 HitReactMinInterval 0.3s(去抖 · debounce / throttle)——连续射击不形成锁链(stun-lock)。自身挥击中不打断(动画槽互斥)。
✅ 受击反应 Enemy-E 已 PIE ✅ 逐骨命中 / 数据驱动弱点倍率
死亡与战利品
Death & Loot血量归零触发死亡处理(death handling):播死亡动画 · death montage 停末帧。尸体为可搜刮容器(lootable corpse,搜完揭示),可选地面散落。
动画 ANIM死亡表现 Death
单节点死亡动画整体接管、播一次停末帧,尸体保持倒地不回融 idle。(布偶物理 · ragdoll 与地面散落均试过后回退,当前为稳定 death montage。)
尸体搜刮 Loot Search
搜刮揭示 · search-to-reveal(塔科夫式):靠近显交互,搜 CorpseSearchSeconds 2.5s 完成后才揭示内容,复用容器 / 网格搜刮 UI。有掉落物的尸体常驻、空尸体 60s 后回收。
掉落表 Loot Table
按 LootTableId 掷骰;DropScatterChance(每原型可配,默认 0)概率额外散落到地面为可拾取世界物品。
任务挂钩 Quest Hook
带 EncounterGroupId 的死亡 → NotifyKill 推进击杀计数 · kill-count objective,收容关卡据此聚合「清场」。
✅ 死亡 + 尸体搜刮 Enemy-F 已 PIE ⬜ 死亡血液 / gore VFX 未做(命中血已做)
命中表现 · VFX
Hit Feedback — Visual纯表现层(UCSEnemyFeedbackComponent,挂敌人 · 不复制 · 专用服务器跳过)。每次有效命中由受击多播在各端触发。
附着修正 Attachment Fix
根因:旧实现于世界命中点生成、无附着(world-space spawn, no attach)——敌人移动后血溅滞留原位,多打上半身即呈「飘于头顶」。修复:血溅骨骼附着 · bone attachment(SpawnSystemAttached + KeepWorldPosition 保留命中点)→ 自命中肢体喷出并跟随骨骼;无有效骨骼回退世界点。
视觉 VFX程序化变体 Variation
随机化(randomization):内置 NS_ShadedBlood_1..5 五套命中特效 · impact VFX,每次命中随机选取,沿命中方向喷溅。
伤害缩放 Damage-scaled
喷溅规模按伤害线性映射(轻伤小、重伤大);头部命中额外 ×1.4(HeadshotBloodScale),强化弱点反馈读性。
命中闪白 Hit Flash
命中闪白 · hit flash(叠加材质 M_HitFlash_Overlay,峰值后 ~0.12s 衰减)当前默认关闭,待调优后启用。无血条(写实);伤害数字 · damage numbers 留作 CVar cs.combat.ShowDamageNumbers 后置。
🔶 Feedback-B 编译通过 · 待 PIE · 可调参数(组件属性,即时生效):变体集合 / BloodVFXScale / 伤害缩放区间 / HeadshotBloodScale。
发声系统 · Audio
Vocalization System新组件 UCSEnemyVocalComponent(挂敌人 · 纯表现 · 不复制 · 专用服务器跳过),数据源 ZombiesVoiceSFX(Moan ×11 / Roar ×19)。采用单声道发声(single-voice)仲裁:事件音抢占(barge-in)、环境音让位。发声骨骼附着 · bone-attached(head)随体移动,启用 3D 空间化 / 衰减 · spatialization / attenuation 与随机音高 · pitch randomization ±10%。
| 触发 Trigger | 表现 Cue | 实现 / 声库 Implementation |
|---|---|---|
| 巡逻 · 平静 ambient idle | 稀疏低吟(6–12s/次) | 状态驱动环境循环 · state-driven ambient loop,本机定时器;Moan 1–6。首发随机偏移,解相关(decorrelate)同屏多体。 |
| 巡逻 · 攻击性 ambient aggressive | 密集躁动喘息(2.5–5s) | 同循环,读复制态 IsAggressive() 切 Moan 7–11、缩短间隔。 |
| 警觉 / 发现 alert | 咆哮(aggro 一次性) | 接 MulticastPlayScream(一次性 one-shot);Roar 1–8。 |
| 攻击 attack | 攻击吼 | 接 MulticastPlayAttackMontage;Roar 9–16。 |
| 受击 pain | 短促痛吟 | 接 MulticastPlayHitImpact;Roar 17–19。节流(throttle)0.6s,避免连续射击时重复触发发声。 |
| 死亡 death | 拖长哀嚎 | host 在 HandleDeath / 客户端在 OnRep_IsDead 各一次(去重);Moan 5/10/11,并停巡逻环境音。 |
🔶 Enemy-Audio-A 编译通过 · 待 PIE(Listen Server + ≥1 客户端) · 可调参数:各声库 / 可闻距离 / 音量 / 音高区间 / 间隔区间 / 痛吟节流。
MulticastPlayScream,仅当敌人配 AggroScreamAnimation 时发(默认 AN_Zombie_Screaming 故正常;清空动画则警觉音一并失声)。脚步音 · footstep SFX 当前未接线。术语表
Glossary本页采用的标准游戏 AI / 设计术语(中文 · English · 一句话定义 · 实现落点)。
| 中文 | English | 定义 / 落点 |
|---|---|---|
| 服务器权威 | Server-Authoritative | 真值与决策只在服务器,客户端发请求 + 演表现。 |
| 感知 / 刺激 | Perception / Stimulus | AI 接收的感官信号源;本作视觉 + 听觉两路(UE AIPerception)。 |
| 视野锥 / 视线 | Sight Cone (FOV) / Line-of-Sight | 有向可视扇区 + 遮挡检测;决定「能否看到」。 |
| 听觉半径 / 响度 | Hearing Range / Loudness | 可闻 ⇔ 距离 ≤ 半径 × 响度;响度由玩家运动态决定。 |
| 声学足迹 | Acoustic Footprint | 玩家发出的噪音总量;隐匿的核心可操纵变量。 |
| 仇恨 / 强制仇恨 | Aggro / Force-Aggro | 锁定目标进入战斗;受创即强制锁定攻击者。 |
| 有限状态机 | Finite State Machine (FSM) | 互斥状态 + 转移条件;本作 5 态。 |
| 巡逻 / 游荡 | Patrol / Wander | 无目标时在驻地锚点附近取可达随机点移动。 |
| 调查 | Investigate | 响应噪音 / 失察,谨慎趋近查看点并搜视。 |
| 最后已知位置 | Last Known Position (LKP) | 丢失视线时记录的目标位置,穷追的目的点。 |
| 穷追宽限期 | Pursuit Grace Period | 丢视后保持仇恨冲 LKP 的限时窗口。 |
| 脱战 / 牵引 | Leash / Tether / Reset | 超出牵引半径放弃追击、返回驻地;玩家得以脱战。 |
| 重新警戒 | Re-aggro | 返程中被近距离获视 / 受创而重新进入战斗。 |
| 运动 / 混合空间 | Locomotion / BlendSpace | 速度驱动的移动动画混合容器。 |
| 姿态 | Stance | 平静 / 攻击性两套移动姿态,由布尔切换。 |
| 滑步 / 足部 IK | Foot Sliding / Foot IK | 脚步与位移不匹配的瑕疵 / 运行时锁脚修正。 |
| 激活帧 / 命中判定 | Active Frame / Hit Detection | 攻击动画中产生伤害判定的帧;经 AnimNotify 卡帧。 |
| 攻击预警 | Telegraph / Wind-up | 攻击前的可读前摇,给玩家反应窗口。 |
| 硬直 / 踉跄 | Hitstun / Stagger | 受击后的短暂行动中断 / 踉跄反应。 |
| 锁链 / 去抖 | Stun-lock / Debounce | 连续硬直锁死 / 以最小间隔节流避免之。 |
| 命中盒 / 弱点倍率 | Hitbox / Weak-point Multiplier | 逐骨命中体积 / 命中弱点的伤害倍率(爆头)。 |
| 命中反馈 | Hit Feedback | 命中的视听反馈(血溅 / 闪白 / 痛吟)。 |
| 骨骼附着 | Bone Attachment | 特效/声音挂到骨骼并随其移动(vs 世界空间)。 |
| 单声道发声 / 抢占 | Single-voice / Barge-in | 一体一嘴,事件音抢占、环境音让位。 |
| 空间化 / 衰减 | Spatialization / Attenuation | 3D 定位 + 距离衰减(远距经低通滤波变闷)。 |
| 遭遇导演 | Spawn / Encounter Director | 按预算动态生成敌人编排遭遇(未实现)。 |
状态图例 & 调参
Status Legend & Tuning调参入口 Tuning Entry Points
- 原型数值(血量 / 移速 / 攻击 / 感知 / 巡逻参数):
Data/Source/EnemyDefinitions.csv→python Scripts\GenerateGameData.py→ 重开 PIE。 - 命中表现 VFX:敌人 BP 的
FeedbackComponent属性(变体集合 / 缩放区间 / 弱点倍率)。 - 发声 Audio:敌人 BP 的
VocalComponent属性(声库 / 可闻距离 / 音量 / 音高 / 间隔 / 节流)。 - 足步匹配 / 步态:调 BlendSpace 采样点(按动作天然脚速),不在 CSV。
Source/CoopSurvival/AI 与 Components 现状,单元状态以 DevelopmentUnits.md 为准。架构 / 类对类地图见 系统设计总览 · 怪物AI 与 UE_CodeArchitecture.md;设计源头见 SD_45(污染变异体) / SD_47(招牌遭遇)。