Skip to content

怪物

This content is not available in your language yet.

海怪是航行途中的主要战斗威胁:从遭遇区刷出,游荡逼近玩家船,优先冲撞船上武器,死亡后掉落怪物尸体;五种代表性怪物各自把一个战斗考点“写在身上”。

怪物(海怪)是玩家船在海上航行时遭遇的敌对生物,阵营固定为 EnemyBaseMonster.cs)。它们在游戏循环中承担“外循环战斗压力”的角色:玩家驶入遭遇区后,时间轴按秒刷出怪群(见 遭遇与刷怪),怪物游荡接近、冲撞或远程吐射攻击船体与船员,玩家用船载武器还击(见 武器与弹药),击杀后掉落怪物尸体(见 战利品与掉落)。

当前共 9 种怪物类型(MonsterType.cs):基础三件套 Normal(普通怪)/ Elite(精英怪)/ Boss1,预留的 Boss2,以及五种“教学考点”代表怪:

类型 中文名 设计考点(写在护甲/行为/外观上)
SteelHorseshoe 钢壳鲎 物理护甲怎么破:厚物理甲、无元素甲无抗性,逼玩家用破甲/穿透/霜蚀脆化
BlazeSerpent 炽鳞蛇 用什么元素:火抗 85%(火点不上),逼玩家换冰/毒
GlideRay 游曳鳐 怎么打中移动目标:无甲薄皮,高速绕圈 + 远程吐射,考验提前量
BarnacleSwarm 藤壶群 怎么高效清群:无甲无抗的脆皮,靠数量压制
AbyssBeast 渊海兽 全套综合:厚双甲 + 全元素抗性,破物理甲后露出弱点

所有怪物运行时共用同一个预制 Assets/Resources/Monster/NormalMonster.prefab,生成时按类型在运行时改色、改尺寸来区分(MonsterVisual.cs):

类型 色调 (RGB) 尺寸乘子
SteelHorseshoe 哑光厚甲灰 (0.45, 0.47, 0.5) ×1.2
BlazeSerpent 橙红炽热 (1, 0.45, 0.15) ×1.0
GlideRay 纤细青蓝 (0.4, 0.85, 1) ×0.8
BarnacleSwarm 密集小体褐 (0.55, 0.4, 0.3) ×0.6
AbyssBeast 巨型暗紫 (0.35, 0.2, 0.45) ×2.0
其余类型 白色(不改色) ×1.0

每只怪物由五状态有限状态机驱动(MonsterStateMachine.cs),每帧更新。转换表(MonsterStateTransitionTests.cs 全表锁定):

状态 进入条件 状态内行为 退出条件 允许转往
Spawning(出生中) 工厂创建怪物后强制进入(绕过转换校验) 碰撞体关闭、模型隐藏、不可被攻击/不可被武器锁定、不检测玩家 累计 1.5 秒后自动转 Idle(SpawningState.cs 常量 FadeInSeconds Idle、Death
Idle(待机/游荡) 出生 1.5 秒后;或攻击/后退中失去玩家 区域内短距离游荡(带武器偏向);进入后先等待 2.0 秒才开始检测玩家(IdleState.cs 常量 IDLE_WAIT_TIME),防止刚后退完立刻再冲 等待期满且玩家在检测半径内 → Attack Attack、Death
Attack(攻击) 玩家进入检测半径 选定目标(武器优先,负载均衡)→ 以 2.5 倍速冲撞或绕圈吐射;每 0.2 秒追踪目标,目标位移超 3 米则重新设定冲撞点 ① 冲撞移动结束 → Retreat;② 玩家离开检测半径 → Idle;③ 攻击超过 5 秒超时 → Retreat(AttackState.cs Retreat、Idle、Death
Retreat(后退) 攻击完成(撞到或移动到位) 沿“远离玩家”方向以 2.0 倍速后退 RetreatDistance 米(不受游荡区边界限制,仅在 XZ 平面计算) ① 后退完成且玩家仍在检测半径 → Attack(形成攻击循环);② 后退完成且玩家已离开 → Idle;③ 1.0 秒内未能开始后退 → Idle(RetreatState.cs Attack、Idle、Death
Death(死亡) 血量归零(任何状态都可强转入) 掉落处理 → 播放死亡特效 → 0.1 秒后销毁游戏物体(BaseMonster.cs 终态,不可退出

任何状态都不能正常转入 Spawning,因此出生时由 MonsterFactory.cs 用强制切换进入。

  • 每帧计算怪物到玩家(Tag 为 Player 的物体,即玩家船)的直线距离,距离 ≤ DetectionRadius(CSV 配置,单位米)即视为“玩家在范围内”(BaseMonster.cs)。
  • 没有视线遮挡判定,纯距离球形检测。
  • Spawning 期间检测被整体抑制,避免出生瞬间被远程锁定或刚出现就冲船。

怪物被生成后绑定到一个游荡区(遭遇区适配的 IMonsterIdleZone),游荡规则(BaseMonster.csNormalMonster.cs):

  • 每隔 PatrolInterval ± 0.5 秒(随机扰动)发起一次游荡移动,单步距离为 2 米 ~ 安全半径之间随机。
  • 安全半径 = min(PatrolRadius, 到区域边界距离 − 0.5 米);安全半径 < 1 米或采样 5 次都落在区域外时,改为直接把游荡目标取为区域内随机点(区域半径的 50%~80% 处,最多重试 10 次,仍失败则取区域中心),怪物正常移动过去(无瞬移)。
  • 怪物在区域外时,以 2.0 倍速快速返回区域。
  • 武器偏向:游荡目标方向会向“最近的船载武器”方向插值,偏向强度 0.4(IdleState.cs 常量 WEAPON_BIAS_STRENGTH),即 游荡方向 = Lerp(随机方向, 朝武器方向, 0.4),游荡距离不变——怪群会自然地越逛越靠近武器。

攻击目标选择(武器威胁负载均衡)

Section titled “攻击目标选择(武器威胁负载均衡)”

进入 Attack 状态时,怪物先向 WeaponThreatService.cs 申请一个“最优武器目标”;申请不到(船上没有可用武器)才退而攻击玩家船位置:

武器评分 = 距离因子 × 1.0 + 锁定数因子 × 2.0 + 随机数(−0.3 ~ +0.3),评分最低者当选 其中 距离因子 = clamp01(怪物到武器距离 / 100 米),锁定数因子 = clamp01(已锁定该武器的怪物数 / 10)

  • 权重(距离 1.0 / 锁定数 2.0 / 随机 ±0.3)是 WeaponThreatService 的 Inspector 序列化字段(挂在场景物体上可调);归一化基准 100 米 / 10 只是代码常量。
  • 武器列表每 2 秒从 BuildingRegistry 刷新一次(Inspector 字段 _refreshInterval)。
  • 锁定会登记到服务端,怪物退出 Attack 状态或死亡时解锁;武器中途被拆毁时,怪物自动改为攻击玩家船。

近战冲撞(Normal / Elite / Boss1 / 钢壳鲎 / 炽鳞蛇 / 藤壶群)

Section titled “近战冲撞(Normal / Elite / Boss1 / 钢壳鲎 / 炽鳞蛇 / 藤壶群)”
  1. 以 2.5 倍移动速度(代码常量 ATTACK_SPEED_MULTIPLIERNormalMonster.cs)直线冲向目标点(匀速,无缓动)。
  2. 冲撞途中每 0.05 秒(Inspector 字段 collisionCheckInterval)向移动方向发射球形射线(球半径 1 米、射线长 10 米,NormalMonster.prefab 序列化值),命中 ShipBuilding 层且命中距离 ≤ 0.3 米(prefab 序列化值 shipCollisionDistance)判定为撞击;物理碰撞和触发器进入作为补充判定。
  3. 撞击结算(NormalMonster.cs):
    • 对船体:撞船伤害 = round(10 × 攻击力减益乘子)——注意是代码常量 10,不读 CSV 的 Attack 字段;伤害经 ShipDamageHelper.cs 落到命中点最近的可伤害建筑上(见 伤害与护甲建筑)。
    • 对船员溅射:以怪物为圆心 3 米半径(代码常量),溅射基准 = round(Attack ÷ 2 × 攻击力减益乘子),按距离线性衰减:单个船员受到 max(1, round(溅射基准 × (1 − 距离/3))),每次撞击每个船员只结算一次(见 船员)。
    • 每次冲撞只造成一次船体伤害(防重复标记,下次进 Attack 重置)。
  4. 撞击后立即停止移动并转入 Retreat。

行为风格由类型查表(MonsterBehaviorStyle.cs):

类型 移动风格 攻击风格 理想交战距离
GlideRay 绕圈(Orbit) 远程吐射 8 米
AbyssBeast 直冲(Charge) 远程吐射 10 米
其余全部 直冲(Charge) 近战冲撞 2 米
  • 绕圈机动(MonsterManeuver.csNormalMonster.cs):与目标距离 < 理想距离 × 80% 时先后撤到理想距离;否则沿以目标为圆心、理想距离为半径的圆每步推进 20 度。绕圈也使用 2.5 倍攻击速度档。
  • 吐射判定(NormalMonster.cs):玩家距离 ≤ AttackRange(CSV)才会开火;按目标当前速度解算提前量瞄点(InterceptSolver),弹体初速 15 米/秒、吐射间隔 1.5 秒(两者为 NormalMonster 序列化字段的代码默认值,prefab 未覆盖);弹道发射瞬间锁定,不追踪,目标继续机动即脱靶。
  • 命中率减益:怪物若中了命中率减益(弹药附带,见 元素与状态效果),瞄点随机偏移半径 = (1 − 命中率乘子) × 4 米。
  • 弹体:优先用 Inspector 配置的弹体预制;未配置时运行时生成兜底小球(直径 0.3、无碰撞体),走通用 Bullet.cs 结算——兜底弹体基础伤害为 Bullet 默认值 10,同样不读 CSV 的 Attack。
  • 麻痹打断定身期间(见下文)暂停吐射与转向。

所有移动用补间驱动(匀速直线),实际速度 = CSV MoveSpeed × 档位乘子(NormalMonster.cs 代码常量):

移动类型 乘子 场景
Patrol 巡逻 ×1.0 Idle 游荡
Attack 攻击 ×2.5 冲撞、绕圈
Retreat 后退 ×2.0 攻击后脱离
ReturnToArea 返回区域 ×2.0 游荡出界快速返回

转向耗时 0.5 秒(prefab 序列化字段 rotationDuration)。

怪物初始化时按类型挂载战斗档案(双护甲池 + 四元素抗性,目标类别为“生物”),数值全部硬编码在 MonsterCombatProfile.cs(代码常量,注释明确“设计阶段手写、后续可迁移 CSV”):

类型 物理护甲 元素护甲 火抗 冰抗 毒抗 电抗
Normal 0 0 0 0 0 0
Elite 30 20 0 0 0 0
Boss1 / Boss2 60 40 30% 30% 30% 0
SteelHorseshoe 80 0 0 0 0 0
BlazeSerpent 10 20 85% 0 0 0
GlideRay 0 0 0 0 0 0
BarnacleSwarm 0 0 0 0 0 0
AbyssBeast 100 80 30% 30% 30% 30%
  • 护甲是可被打掉的“护甲值池”(先扣甲再扣血,破甲联动等结算规则见 伤害与护甲)。
  • 渊海兽专属“破甲露弱点”(NormalMonster.cs):物理护甲池被打到 0 的瞬间(一次性触发),元素护甲池立刻清零、全身变红(RGB 1, 0.35, 0.35)提示全面受创。
  • 怪物受元素命中会叠加元素状态层数,全身按主导元素着色(StatusEffectVisual,挂载于初始化时)。

元素状态与减益对怪物行为的影响

Section titled “元素状态与减益对怪物行为的影响”

怪物移动速度实际乘子(NormalMonster.cs 属性 LocomotionScale):

移动乘子 = 元素动作效率 × 麻痹打断定身乘子 × 移动减益乘子

各分量(数值出自 StatusTuning.cs,机制详见 元素与状态效果):

来源 1 层 2 层 3 层 说明
冷冻(冰)减速 −30% −60% −90% 冻结质变时直接归零(完全定身)
麻痹(电)减速 −10% −25% −50% 与冷冻减速相乘叠加
麻痹打断几率 10% 25% 50% 每 0.6 秒判定一次,命中则瞬时定身 0.35 秒,期间暂停移动、攻击、吐射

另有三类平行减益(由特种弹药施加,取最强值、到时恢复,CombatDebuffState.cs):移动减益(直接乘进移动乘子)、攻击减益(缩放撞船伤害与船员溅射,乘子为 0 时本次撞击不造成伤害)、命中减益(吐射脱靶半径,见上文)。

生成入口只有一个:MonsterFactory.cs 的 CreateMonster(遭遇区时间轴与开发者工具都走这条路),流程:读 CSV 静态配置 → 实例化共用预制 → 按类型应用外观 → 初始化(满血、挂护甲档案与元素状态控制器)→ 强制进入 Spawning。生成调度本身(哪个区、什么时间、刷什么)由遭遇系统负责,详见 遭遇与刷怪,与本页相关的要点:

  • 刷新位置在船的本地坐标系采样:左右 ±35 米、前方 50 米、后方 10 米的矩形内,拒绝距船 20 米以内的点(防贴脸),拒绝陆地与区外点,同批怪物间最小间距取 CSV 的 MinDistanceBetweenMonsters,每个位置最多采样 20 次(DirectionalSpawnDirector.csEncounterSpawnConstants.cs)。
  • 刷新数量来自遭遇时间轴 EncounterTimelines.csv 的 count 参数与压力地板(存活数低于地板值且距上次强制刷新 ≥ 3 秒时补刷 Normal ×1),CSV 中的 MinSpawnCount / MaxSpawnCount 两列当前没有任何运行时消费者
  • 消失途径共三种(ZoneArenaSession.csDespawnEnforcer.cs):
    1. 被玩家击杀:走完整死亡流程(掉落 + 0.1 秒后销毁)。
    2. 距离消失:每 0.5 秒检查一次,距玩家船 > 100 米(代码常量 DespawnRange)的怪被直接处死——注意也会走死亡流程并在原地掉落。
    3. 离区清理:玩家离开遭遇区、会话结束时全部处死。

死亡流程(BaseMonster.csDropManager.cs):

  1. 掷骰 Random(0, 100),结果 ≤ DropChance(CSV,百分比)则掉落;当前所有怪 DropChance = 100,必掉。
  2. 掉落物 ID(CSV DropItemId,当前全部为 MonsterCorpse)经映射表 DropItemMapping.asset(Unity 资产,Inspector 配置)解析为预制件——当前映射到 DropTest.prefab,在怪物死亡位置实例化。
  3. 拾取与入库见 战利品与掉落

BossMonster.cs 是一套独立于五状态机的手摆 Boss(Roaming / Combat / Dead 三态自驱动):沿场景中手工指定的路径点巡游(每 300 秒换点),玩家进入 40 米检测圈后进入战斗,每 3 秒冷却向玩家位置冲锋一次,死亡时广播 Boss 被击败消息(含海域归属国,供 阵营与外交 结算)、隐藏模型并在 600 秒后于随机路径点满血重生。全部数值为 Inspector 序列化字段:HP 1000 / 攻击 30 / 检测 40 米 / 速度 1.5 米每秒 / 巡游间隔 300 秒 / 重生 600 秒 / 攻击冷却 3 秒。

注意区分:遭遇时间轴 boss_kraken 里刷的 type=Boss1 走的是普通怪物工厂——共用预制 + Boss1 的 CSV 行 + Boss 护甲档案,行为与普通冲撞怪相同;BossMonster.cs 脚本本身当前没有出现在任何场景或预制中(见已知限制)。

公式 出处
撞船伤害 = round(10 × 攻击力减益乘子),固定基数 10 NormalMonster.cs(代码常量)
船员溅射伤害 = max(1, round(Attack ÷ 2 × 攻击减益 × (1 − 距离/3))),半径 3 米 NormalMonster.cs(代码常量)
武器目标评分 = clamp01(距离/100)×1.0 + clamp01(锁定数/10)×2.0 + rand(±0.3),最低者当选 WeaponThreatService.cs
游荡方向 = Lerp(随机方向, 朝最近武器方向, 0.4) IdleState.cs / WeaponThreatService.cs
游荡安全半径 = min(PatrolRadius, 到边界距离 − 0.5 米),单步 2 米起 BaseMonster.cs
下次游荡时刻 = 当前 + PatrolInterval + rand(±0.5 秒) BaseMonster.cs
移动乘子 = 元素动作效率 × 麻痹定身乘子 × 移动减益乘子 NormalMonster.cs
吐射脱靶偏移半径 = (1 − 命中率乘子) × 4 米 NormalMonster.cs
绕圈:距离 < 理想距离×0.8 先后撤,否则每步沿圆推进 20 度 NormalMonster.cs / MonsterManeuver.cs

CSV 列含义(StaticMonsterConfig.csv,15 列)

Section titled “CSV 列含义(StaticMonsterConfig.csv,15 列)”
类型 单位 用途
MonsterId string 行 ID(当前与类型同名)
MonsterType 枚举 对应 MonsterType 枚举值
MaxHP int 最大血量(出生满血)
Attack int 攻击力——当前仅用于船员溅射(÷2)与 Inspector 显示,撞船伤害不读它
DetectionRadius float 玩家检测半径(进攻触发距离)
AttackRange float 攻击距离门槛(远程怪开火距离;近战怪只影响朝向调用)
RetreatDistance float 攻击后的后退距离
MoveSpeed float 米/秒 基础移动速度(再乘档位乘子)
PatrolRadius float 游荡半径上限
PatrolInterval float 游荡间隔(±0.5 秒扰动)
MinSpawnCount int 当前无运行时消费者
MaxSpawnCount int 当前无运行时消费者
MinDistanceBetweenMonsters float 同批刷新时怪物间最小间距
DropItemId string 掉落物映射键(当前全部 MonsterCorpse)
DropChance float 百分比 0-100 掉落概率(当前全部 100)

难度数据集对比(none / easy / hard)

Section titled “难度数据集对比(none / easy / hard)”

运行时默认读取 Assets/StreamingAssets/DataSets/monsters/none/StaticMonsterConfig.csv(生成代码 StaticMonsterConfig.cs 内置路径);开发者工具的场景预设(ScenarioLoader.cs,monsters 轴)可整套切换到 easy / hard。三套数据集只有 Normal / Elite / Boss1 三行有差异,五种代表怪的行完全相同:

怪物 字段 none easy hard
Normal 整行 不存在(刷 Normal 会因查不到配置而失败,等于关闭普通怪) 存在 存在
Normal MaxHP / Attack 50 / 5 200 / 20
Normal DetectionRadius / AttackRange 25 / 2 50 / 3
Normal MoveSpeed / PatrolRadius / PatrolInterval 2 / 6 / 5 5 / 10 / 2
Normal Min~MaxSpawnCount / 间距 1~10 / 2 5~50 / 2
Elite MaxHP / Attack 1 / 0(站桩沙包) 200 / 15 400 / 35
Elite DetectionRadius / RetreatDistance / MoveSpeed / PatrolRadius 1 / 1 / 1 / 1 60 / 12 / 6 / 10 60 / 12 / 6 / 10
Boss1 MaxHP / Attack 1 / 0(站桩沙包) 500 / 30 1200 / 70
Boss1 DetectionRadius / RetreatDistance / MoveSpeed / PatrolRadius 1 / 1 / 1 / 1 80 / 15 / 4 / 12 80 / 15 / 4 / 12

五种代表怪(三套数据集相同,CSV 配置表,可直改):

怪物 MaxHP Attack 检测半径 攻击范围 后退距离 移速 巡逻半径 巡逻间隔 Min~Max 刷新数* 间距 掉落
SteelHorseshoe 钢壳鲎 120 8 25 2 10 1.5 6 5 1~3 2 MonsterCorpse 100%
BlazeSerpent 炽鳞蛇 70 10 30 2 10 3 6 4 2~4 2 MonsterCorpse 100%
GlideRay 游曳鳐 50 6 40 8 15 7 8 3 2~3 2 MonsterCorpse 100%
BarnacleSwarm 藤壶群 15 3 20 2 8 2.5 5 3 10~20 1 MonsterCorpse 100%
AbyssBeast 渊海兽 600 30 80 2 15 3 12 4 1~1 3 MonsterCorpse 100%

* 刷新数两列当前无运行时消费者,实际数量由遭遇时间轴决定。

另有一份根目录 Assets/StreamingAssets/StaticMonsterConfig.csv(Normal 100HP/10 攻、Elite 300/25、Boss1 800/50,五种代表怪同上),运行时不读取它——生成代码固定指向 none 数据集,它只是代码生成器的扫描源/历史母表,改它不影响游戏。

easy 数据集额外多一份 MonsterPolygons.json(12 个多边形怪区,含 monster_types / max_monsters / spawn_interval 字段),由 MonsterPolygonsData.cs 加载,但当前没有任何运行时系统消费这份数据(见已知限制)。

参数 来源
出生无敌窗口 1.5 秒 SpawningState.cs 代码常量(与 EncounterSpawnConstants.cs 同步)
Idle 进入后检测延迟 2.0 秒 IdleState.cs 代码常量
游荡武器偏向强度 0.4 IdleState.cs 代码常量
攻击追踪间隔 / 目标位移阈值 0.2 秒 / 3 米 AttackState.cs 代码常量
攻击超时 5 秒 AttackState.cs 代码常量
后退失败超时 1.0 秒 RetreatState.cs 代码常量
速度档位(巡逻/攻击/后退/回区) ×1.0 / ×2.5 / ×2.0 / ×2.0 NormalMonster.cs 代码常量
撞船固定伤害基数 10 点 NormalMonster.cs 代码常量
船员溅射半径 3 米 NormalMonster.cs 代码常量
死亡销毁延迟 0.1 秒 BaseMonster.cs 代码常量
距离消失阈值 / 检查频率 100 米 / 每 0.5 秒 EncounterSpawnConstants.csZoneArenaSession.cs
麻痹打断判定间隔 / 定身时长 0.6 秒 / 0.35 秒 StatusTuning.cs 代码常量

Inspector 序列化参数(NormalMonster.prefab / 场景物体)

Section titled “Inspector 序列化参数(NormalMonster.prefab / 场景物体)”
参数 prefab 当前值 代码默认值 说明
rotationDuration 0.5 秒 0.5 秒 转向耗时
shipCollisionDistance 0.3 米 0.5 米 撞击判定距离
collisionCheckInterval 0.05 秒 0.05 秒 球形射线检测间隔
maxRaycastDistance 10 米 50 米 射线最大长度
sphereCastRadius 1 米 1.5 米 球形射线半径(容忍船体上下浮动)
shipBuildingLayer (层掩码) 船体建筑层
_rangedProjectilePrefab 未配置 吐射弹体预制(空则运行时兜底小球)
_rangedProjectileSpeed (未覆盖→15) 15 米/秒 吐射初速
_rangedFireInterval (未覆盖→1.5) 1.5 秒 吐射间隔
WeaponThreatService 四参数 刷新 2 秒 / 距离权重 1 / 锁定权重 2 / 随机 0.3 场景物体上可调
  • 遭遇与刷怪:遭遇区、时间轴(EncounterTimelines.csv:swarm_light / swarm_med / swarm_heavy / boss_kraken)、压力地板与会话生命周期决定怪物何时何地出现与清理。
  • 武器与弹药:怪物的首选攻击目标是船载武器;玩家用武器与八类弹药击杀怪物。
  • 伤害与护甲:双护甲池、破甲联动、伤害结算内核;怪物撞船伤害经统一的“命中点 → 最近建筑”路径落地。
  • 元素与状态效果:元素叠层、冻结/麻痹/减益对怪物移动与攻击的全部影响来自该系统。
  • 船员:撞击溅射伤害的承受者。
  • 船只 / 建筑:撞击的直接受害者是船体建筑。
  • 战利品与掉落:怪物尸体掉落与拾取。
  • 世界/阵营与外交:Boss 被击败消息携带海域归属国与击杀者阵营。
  • 开发者工具:强制刷怪(含五种代表怪一键布置)、清怪、暂停刷新、对附近怪施加元素层(DevToolsManager.cs)。
  • 配置表总览:怪物 CSV 在全部配置表中的位置。
想调什么 改哪里 类型
某怪血量/攻击/速度/检测半径/巡逻/掉落 Assets/StreamingAssets/DataSets/monsters/{none,easy,hard}/StaticMonsterConfig.csv 对应行(注意:根目录同名 CSV 运行时不生效) CSV
测试场景用哪套难度 Assets/StreamingAssets/Presets/*.json"monsters" 字段(none/easy/hard) JSON 预设
怪物护甲/元素抗性 MonsterCombatProfile.cs 的类型分支 代码常量(需程序改)
远程/绕圈行为与理想交战距离 MonsterBehaviorStyle.cs 的类型分支 代码常量(需程序改)
各类型颜色/尺寸 MonsterVisual.cs 代码常量(需程序改)
撞船伤害基数 10 / 溅射半径 3 米 NormalMonster.cs 代码常量(需程序改)
出生无敌时长 1.5 秒 / 消失距离 100 米 SpawningState.cs + EncounterSpawnConstants.cs(两处需同步改) 代码常量(需程序改)
攻击/后退速度倍率、各状态计时 NormalMonster.csIdleState.csAttackState.csRetreatState.cs 代码常量(需程序改)
撞击判定距离/射线参数/转向时长 Assets/Resources/Monster/NormalMonster.prefab 上的 NormalMonster 组件 Inspector
吐射弹体预制/初速/间隔 同上 prefab(当前未覆盖,用代码默认) Inspector
武器负载均衡权重 场景中 WeaponThreatService 组件 Inspector
掉落物 ID → 预制映射 Assets/Scripts/Service/Monster/DropItemMapping.asset Inspector(资产)
刷怪节奏与数量 Assets/StreamingAssets/Encounter/EncounterTimelines.csv / EncounterZones.csv CSV
Boss 海怪全部数值 场景中 BossMonster 组件(当前未摆放) Inspector
  1. 撞船伤害不读 Attack:近战撞击对船体的伤害是代码写死的基数 10(NormalMonster.cs),CSV 的 Attack 只影响船员溅射(÷2);调 Attack 不会让怪撞船更疼。
  2. 远程吐射伤害也不读 Attack:兜底弹体伤害为 Bullet.cs 序列化默认 10;要改吐射伤害需配置弹体预制。
  3. MinSpawnCount / MaxSpawnCount 两列无消费者:实际刷新数量完全由 EncounterTimelines.csv 的 count 与压力地板决定。
  4. 根目录 StaticMonsterConfig.csv 不被运行时读取:运行时固定走 DataSets/monsters/none/,预设可切 easy/hard;改根目录文件无效(它是代码生成器的扫描源)。
  5. none 数据集靠“删行 + 1 血沙包”实现关怪:Normal 行直接缺失(刷怪请求会失败并打日志),Elite/Boss1 留 1 血 0 攻沙包行。
  6. 距离消失也走完整死亡流程:超 100 米被清理的怪同样掉落尸体(掉在远处海面)。
  7. BossMonster.cs 未接入:脚本未出现在任何场景/预制中;且其 Combat 状态只会冲向玩家,没有任何造成伤害的代码路径(序列化的攻击力 30 未接入结算),也没有配置 DropItemId(死亡不掉落)。当前游戏里“Boss 体验”实际由时间轴刷出的 Boss1 普通怪承担。
  8. Boss2 只有枚举与护甲档案:CSV 无 Boss2 行,刷不出来。
  9. easy 数据集的 MonsterPolygons.json 加载后无人使用MonsterPolygonsData.cs 只有 ScenarioLoader 调它加载,没有任何刷怪系统读取其多边形区域。
  10. AttackRange 对近战怪几乎无意义:近战冲撞由移动+碰撞判定完成,AttackRange 只控制 Attack() 里“转向朝玩家”这个调用是否执行;真正的进攻触发距离是 DetectionRadius。
  11. 检测无视线遮挡:纯距离球形检测,隔着岛也能“看见”玩家。
  12. 护甲/抗性/行为风格/外观均为硬编码:设计阶段决策(MonsterCombatProfile.cs 注释),策划无法通过配置表调整,后续计划迁移 CSV 数据中心。
  13. 设计文档(Docs/qq/.../monster-bestiary-framework_design.md 等)已随分支清理删除,本页全部以代码现状为准。