元素与状态效果
This content is not available in your language yet.
四元素(火/冰/毒/电)叠层状态系统:元素命中投色子叠层(每元素最多 3 层),满 3 层再判定一次触发单元素质变,异种元素相遇立即引爆双元素反应;火/毒/电状态还会自行向周围蔓延、生成区域危害,并以“主导元素着色”直接画在目标模型上。
元素与状态效果是航海战斗的纵深层:物理伤害解决“打掉多少血”,元素系统解决“用什么打、怎么打”。每种怪物的护甲与抗性差异(见 怪物)逼迫玩家在战斗中切换弹药元素——高火抗的炽鳞蛇火点不着,要换冰或毒;厚物理甲的钢壳鲎可以用“冰+毒霜蚀脆化”直接削甲。
玩家接触本系统的路径:
- 选弹药:装填带元素载荷的弹药。动能弹附带少量元素(4 点),元素弹以元素为主(10 点、物理减弱到 40%);测试模式下数字键 1-8 全船切换八种代表性弹药(
AmmoCatalog.cs),详见 武器与弹药。 - 喷射式武器:火焰喷射等持续喷射武器按“浓度 × 距离衰减”高频投色子叠层(
FlameProjectile.cs),连续喷射自然把低几率累积成必然。 - 看反馈:被叠层的目标整体着色(火红/冰蓝/毒绿/电紫),层数越高颜色越重;质变与反应产生范围爆发、毒雾、蒸汽云等区域效果。
承受方:怪物(生成时自动挂状态控制器与着色组件,BaseMonster.cs)和建筑(初始化时自动挂,Building.cs,生物与建筑处于同一传播网络)。船员不承受元素状态(未挂载状态控制器,施加时静默落空),但元素伤害通道的直伤和区域危害照常扣船员血。
元素类型清单
Section titled “元素类型清单”| 元素 | 英文标识 | 单元素状态名 | 持续效果 | 满 3 层质变 |
|---|---|---|---|---|
| 火 | Fire(索引 0) |
点燃 | 持续火伤,向邻近目标蔓延 | 失控烈焰(自爆+范围点燃) |
| 冰 | Ice(索引 1) |
冷冻 | 动作效率降低 | 冻结(定身+易碎) |
| 毒 | Poison(索引 2) |
腐蚀 | 持续毒伤,近距接触传播 | 溃烂引爆(爆发+毒雾) |
| 电 | Lightning(索引 3) |
麻痹 | 动作效率降低+间歇打断,远距传导 | 过载放电(链式麻痹) |
出处:CombatEnums.cs。每个目标身上四元素各自独立记层数(0~3 层,上限 MaxLayers = 3)与剩余持续时间(ElementalStatusState.cs)。
元素施加:先判反应,再投色子
Section titled “元素施加:先判反应,再投色子”每次元素命中(子弹元素载荷、喷射、毒雾区域、点燃蔓延等)走唯一入口(StatusEngine.cs),顺序固定:
- 先判反应:目标身上若存在能与入射元素构成反应对的异种活跃元素,立即触发双元素反应(不投色子、不受抗性影响),双方元素全部清层,本次命中结束。多个可反应对时取对方层数最高者(同层按火→冰→毒→电的枚举序取先者)。
- 否则投色子升层:
升层成功几率 = 下一层基础几率 × (1 − 元素抗性) × 浓度 (最终封顶 100%)| 当前层数 | 升层基础几率 | 含义 |
|---|---|---|
| 0 层 → 1 层 | 90% | 第 1 层好上 |
| 1 层 → 2 层 | 50% | 第 2 层麻烦 |
| 2 层 → 3 层 | 25% | 第 3 层难 |
| 已满 3 层 | 25% | 再成功一次 → 质变并清空该元素 |
出处:StatusTuning.cs(LayerChanceL1/L2/L3、TransformChance),代码常量。设计意图是“靠高命中频率把低几率累积成必然”,质变无免疫、可反复触发,频率由抗性与浓度控制。
补充规则(StatusEngine.cs):
- 同元素命中刷新持续时间:只要目标该元素已有层数,每次同元素命中(无论升层成功与否)都把剩余持续刷新为“当前剩余”与“新持续”中的较大值;升层成功时同样刷新。
- 反应触发时入射元素本身有没有层数无所谓——副元素只需补 1 发即可引爆。
浓度来源(决定“越浓越容易施加”):
| 来源 | 数值 | 来源类型 |
|---|---|---|
| 子弹“元素浓度”字段 | 默认 1,范围 0.1~5 | Unity Inspector 序列化字段(弹丸 prefab,Bullet.cs) |
| 喷射“浓度”字段 | 默认 1,范围 0.1~5 | Unity Inspector 序列化字段(FlameProjectile.cs) |
| 喷射距离衰减 | 实际浓度 = 浓度 × max(0, 1 − 每米衰减度 × 距喷口米数);“元素衰减度”字段范围 0~0.2/米,0=不衰减 | Unity Inspector 序列化字段(FlameProjectile.cs) |
| 区域危害(毒雾)、点燃蔓延、腐蚀传播 | 固定 1 | 代码常量(HazardZone.cs、StatusEffectController.cs) |
注意一个不对称:子弹的元素伤害通道数值随飞行距离衰减(与物理伤害同比例),但其施加浓度不随距离变化(Bullet.cs);喷射武器则相反——浓度随距离衰减、几率变低(FlameProjectile.cs)。
持续时间与衰减
Section titled “持续时间与衰减”- 施加持续时间固定 4 秒:所有生产路径(子弹、喷射、毒雾、蔓延、反应扩散、开发者工具)目前都传
StatusTuning.DefaultDuration = 4秒。代码注释明确这是占位值,“Phase 4 运行时按武器/浓度细化”。代码常量。 - 每元素独立倒计时:每帧按真实时间衰减;某元素剩余时间归零时一次性清空该元素全部层数(不是逐层掉落)。出处:
ElementalStatusState.cs。 - 冻结定身、易碎倍率各有独立计时器,到时恢复(易碎恢复为 ×1)。
- 持续期间被同元素再次命中即刷新(见上节),所以持续火力压制下状态实际不会掉。
分层效果数值(被叠层后发生什么)
Section titled “分层效果数值(被叠层后发生什么)”| 状态 | 1 层 | 2 层 | 3 层 | 单位/说明 |
|---|---|---|---|---|
| 点燃 DoT | 2 | 5 | 10 | 点/秒,火元素通道,经完整伤害结算 |
| 腐蚀 DoT | 1 | 2 | 4 | 点/秒,毒元素通道,封顶仍低于同层火(偏缠绵) |
| 冷冻减速 | −30% | −60% | −90% | 动作效率降低比例 |
| 麻痹减速 | −10% | −25% | −50% | 动作效率降低比例 |
| 麻痹打断几率 | 10% | 25% | 50% | 每次判定的触发概率 |
出处:StatusTuning.cs(FireDotPerSecond、PoisonDotPerSecond、IceSlow、LightningSlow、LightningInterruptChance),代码常量。
动作效率合成公式(StatusEffectRuntime.cs):
动作效率乘子 = (1 − 冷冻减速) × (1 − 麻痹减速)冻结期间动作效率 = 0(完全定身,覆盖上式)例:2 层冰 + 1 层电 → (1−0.6) × (1−0.1) = 0.36 倍速。
麻痹间歇打断(当前仅怪物实现,NormalMonster.cs):
- 每 0.6 秒判定一次(
ParalysisInterruptCheckInterval),按当前麻痹层的打断几率投色子。 - 命中则 0.35 秒完全定身(
ParalysisInterruptDuration)——移动暂停且攻击行为暂停(打断窗口内怪物的攻击逻辑直接跳过:远程怪不吐射、不重新瞄准)。 - 出处:
StatusTuning.cs代码常量;接入点NormalMonster.cs。
怪物最终移速公式(NormalMonster.cs,LocomotionScale):
怪物移速倍率 = 元素动作效率乘子 × 麻痹打断瞬时乘子(0 或 1) × 平行 debuff 移动乘子该倍率每帧写入怪物的移动/转向动画时间缩放,0 即原地停滞。
DoT 结算细节:点燃/腐蚀伤害每帧按时间切片打包成元素伤害包,走 DamageResolver.cs 完整结算——元素护甲未破时按 20% × (1 − 抗性) 渗透到 HP、护甲按 伤害 × (1 − 抗性) 消耗,护甲已破则全额进 HP。DoT 走专用入口 DamageableComponent.TakeStatusDamage:不触发状态叠层、不发伤害归因消息(不计声望/击杀归因)、受无敌模式拦截。详见 伤害与护甲。
满 3 层质变(单元素爆点)
Section titled “满 3 层质变(单元素爆点)”满 3 层后再通过一次 25% 判定(同样乘抗性与浓度修正)即质变,清空该元素层数。具体效果(StatusEffectController.cs + StatusOutcomeResolver.cs + StatusTuning.cs,全部代码常量):
| 质变 | 对自身 | 对周围(半径 4 米) |
|---|---|---|
| 火 → 失控烈焰 | 一次性 30 点火元素爆发伤害 | 范围内每个目标无视抗性随机获得 0~3 层点燃(0/1/2/3 层各 25%,覆盖式设置,可能压低甚至清掉邻居已有点燃层数),持续 4 秒 |
| 冰 → 冻结 | 定身 2 秒 + 易碎 ×3(物理受伤 +200%)持续 2 秒 | 无 |
| 毒 → 溃烂引爆 | 一次性 20 点毒元素爆发伤害 | 原地生成毒雾(见区域危害一节) |
| 电 → 过载放电 | 自身定身 1 秒 | 对范围内邻居逐个 +1 层麻痹:至少波及 1 个,之后每个 30% 概率终止(平均约 3.3 个),安全上限 32 个;被波及者无视抗性直接 +1 层麻痹,持续 4 秒 |
注意:过载放电的“链式”是简化实现——对 4 米球形范围内收集到的前 N 个邻居各 +1 层,没有真实的逐跳传导路径与跳间距离判定。
双元素反应(异元素引爆)
Section titled “双元素反应(异元素引爆)”打法范式:“先用主元素叠到高层,最后补一发副元素引爆”。反应威力 P = 对方(已在目标身上的元素)层数 + 1,取值 2~4;触发后双方元素全部清层、反应立即生效、不受抗性影响。
| 反应对 | 名称 | 效果(威力记为 P) |
|---|---|---|
| 火 + 毒 | 爆炸 | 对周围 4 米内所有邻居造成 10 × P 点物理伤害(走物理护甲结算,受目标易碎放大);反应宿主自身不受爆炸伤害 |
| 冰 + 火 | 蒸汽灼伤 | 原地生成蒸汽云(见区域危害一节):每秒伤害 = 3 × P,物理与火元素各一半 |
| 冰 + 毒 | 霜蚀脆化 | 立即削减目标当前物理护甲 15 × P 点;若物理护甲被削到 0 触发护甲联动(元素护甲再掉其上限的 50%);同时获得易碎 = 1 + 0.2 × P 倍(物理受伤放大),持续 2 秒(与冻结共用时长常量) |
| 任意 + 电 | 麻痹传播 | 周围 4 米内每个邻居 +2 层伴随元素(反应对中非电的那个元素,叠加式、上限 3 层)+1 层麻痹,均无视抗性,持续 4 秒——“借麻痹的传播属性加速蔓延” |
出处:StatusEngine.cs(反应对判定)、StatusOutcomeResolver.cs(威力换算)、StatusTuning.cs(ExplosionBaseDamage = 10、SteamDpsPerPower = 3、FrostArmorStripPerPower = 15、FrostVulnPerPower = 0.2、ParalysisSpreadPartnerLayers = 2),代码常量。
范围类效果(失控烈焰扩散、火毒爆炸、过载链式、麻痹传播)的作用半径统一为状态控制器的 AreaRadius = 4 米(StatusEffectController.cs 字段默认值;该组件由怪物/建筑初始化代码运行时挂载,实际生效的就是代码默认值,prefab 里改不到)。
范围效果不分敌我:用物理球形检测收集范围内所有带状态控制器的目标(怪物与建筑),火毒爆炸会炸到己方建筑,失控烈焰会点燃友方建筑。范围伤害走 TakeStatusDamage,同样无阵营过滤、无击杀归因。
元素状态被动传播
Section titled “元素状态被动传播”带火/毒/电状态的目标每 1 秒(SpreadTickInterval)做一次传播判定,向范围内每个邻居独立投色子(StatusEffectController.cs + StatusSpreadModel.cs)。冰不传播。
| 传播 | 范围(米) | 每次判定传播几率(按源层数 1/2/3) | 邻居侧结算 |
|---|---|---|---|
| 点燃蔓延 | 4 | 15% / 35% / 70% | 走标准施加流程(再按邻居抗性投升层色子,可能触发邻居身上的反应/质变) |
| 腐蚀接触 | 2 | 20% / 50% / 100%(3 层必传) | 同上 |
| 麻痹间接传导 | 按源层 3 / 5 / 8 | 基础 30% / 50% / 80%,再乘 (1 − 邻居电抗 × 0.5) | 直接 +1 层麻痹(叠加式,上限 3 层),不再投升层色子 |
出处:StatusTuning.cs(FireSpreadChance、CorrosionContactChance、ParalysisConductBaseChance、ParalysisConductRange、FireSpreadRadius = 4、CorrosionContactRadius = 2、ParalysisConductResistanceFactor = 0.5),代码常量。
麻痹传导的抗性只有半效(系数 0.5):即使 100% 电抗,3 层源的传导几率仍有 80% × 0.5 = 40%——设计为“间接麻痹更易传导、高抗不硬免疫”。超出范围则不传导(间接麻痹自然消失)。传播在生物与建筑之间双向有效(怪↔建筑、建筑↔建筑共用同一个传播网络)。
元素抗性如何参与计算
Section titled “元素抗性如何参与计算”每个目标四元素各有一个抗性值,取值 [0, 1)(DefenseProfile.cs)。抗性在三个正交的位置起作用:
- 压低状态施加几率:升层/质变几率 × (1 − 抗性)(
StatusEngine.cs)。 - 元素护甲消耗效率:元素护甲未破时,该元素伤害对护甲的消耗 = 伤害 × (1 − 抗性)——抗性越高护甲越耐用(
DamageResolver.cs)。 - 护甲未破时的渗透:漏到 HP 的部分 = 伤害 × 20% × (1 − 抗性)(
DamageResolver.cs,CombatTuning.ElementalLeakBase = 0.2)。
抗性不参与:双元素反应的触发与效果(无视抗性)、质变与反应的效果本身(注意质变的触发判定仍按升层公式乘 (1 − 抗性),见上文)、护甲已破后的元素直伤(全额进 HP)、平行 debuff 词条。麻痹间接传导按半效单独修正(见上节)。
抗性数值当前全部来自怪物战斗档案静态表(MonsterCombatProfile.cs,代码常量)。建筑没有配置入口——Building.cs 初始化时不配置防御档案,落到默认值:双护甲 0、四抗性全 0(元素状态对建筑全额几率施加,DoT 直接进 HP)。
| 怪物类型 | 物理护甲 | 元素护甲 | 火抗 | 冰抗 | 毒抗 | 电抗 |
|---|---|---|---|---|---|---|
| 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% |
HazardZone 区域危害(毒雾 / 蒸汽云)
Section titled “HazardZone 区域危害(毒雾 / 蒸汽云)”HazardZone.cs 是常驻危害区域的通用载体:存活期间周期性对范围内一切可受击实体施加伤害包(可选附带元素叠层),到期自动销毁。当前两个实例由质变/反应在目标原地生成(区域不移动):
| 参数 | 毒雾(毒质变) | 蒸汽云(冰+火反应) |
|---|---|---|
| 半径 | 4 米(= 源控制器 AreaRadius) |
4 米 |
| 持续时间 | 4 秒 | 4 秒(共用 SteamZoneDuration = 4) |
| 伤害判定间隔 | 0.5 秒/tick | 0.5 秒/tick |
| 每秒伤害 | 4 点毒元素(= 3 层腐蚀 DoT 档) | 3 × 反应威力 P,物理与火元素各一半 |
| 附带状态施加 | 每 tick 对区域内每个带状态控制器的目标投一次毒叠层色子(受抗性,浓度 1,持续 4 秒) | 无 |
| 停留递增 | 无(恒 ×1) | 倍率 = min(3, 1 + 0.5 × 累计停留秒数),停满 4 秒封顶 ×3 |
出处:StatusEffectController.cs(SpawnHazardZone 调用参数)、StatusTuning.cs(SteamRampPerSecond = 0.5、SteamMaxMultiplier = 3),代码常量。
行为细节(HazardZone.cs):
- 每 tick 伤害 = 每秒伤害包 × 本 tick 实际经过秒数 × 停留倍率,走完整伤害结算(护甲门、抗性渗透、易碎放大)。
- 停留计时按目标个体累计;离开区域即清掉该目标的停留计时,再次进入从 ×1 重新递增。
- 无阵营过滤:区域内任何可被攻击的目标(敌怪、玩家船员、己方建筑)一律受伤;伤害走
TakeStatusDamage,不计击杀归因,受无敌模式拦截。
平行 debuff 词条(与元素正交)
Section titled “平行 debuff 词条(与元素正交)”独立于元素系统的“属性/能力削减”词条(CombatDebuffState.cs / CombatDebuffController.cs),由发射物命中时直接施加,不经过元素抗性、不投色子、必中:
| 词条 | 作用目标 | 效果 | 当前消费点 |
|---|---|---|---|
| Move 移动削减 | 生物 | 移速 × 乘子 | 怪物移速(NormalMonster.cs 的 LocomotionScale) |
| Attack 攻击削减 | 生物 | 造成伤害 × 乘子 | 怪物近战/冲撞与溅射伤害(NormalMonster.cs) |
| Accuracy 命中削减 | 生物 | 远程瞄点随机偏移,偏移半径 = (1 − 乘子) × 4 米 | 怪物远程吐射(NormalMonster.cs 的 FireRanged) |
| BuildingDisable 建筑停转 | 建筑 | 停转期间生产推进完全暂停 | 生产组件(ProductionComponent.cs),见 生产与制作 |
规则(CombatDebuffState.cs):
- 乘子取值 0~1(0 = 完全失能,1 = 无削减),同类词条叠加时取最强(最低乘子),持续时间取最长。
- 到时一次性恢复为 1(无渐变)。
- 配置入口:弹丸 prefab 上
Bullet.cs的“平行 debuff 词条”列表(种类/乘子/持续秒数),Unity Inspector 序列化字段。当前没有任何武器 prefab 出厂自带 debuff 词条,属于待武器词条细化后接入的通道。 - 载体:建筑初始化时预挂载(
Building.cs);怪物没有预挂,由命中的子弹首次施加时自动补挂(CombatDebuffController.GetOrAdd)。
视觉反馈:主导元素着色
Section titled “视觉反馈:主导元素着色”StatusEffectVisual.cs 把元素战况直接画在目标身上(怪物与建筑初始化时与状态控制器一起挂载,着色范围 = 目标根节点下所有渲染器):
- 主导元素 = 当前层数最高的元素;并列时按进攻性优先级 火 > 电 > 毒 > 冰 展示。
- 颜色(RGB):火 = 橙红 (1, 0.35, 0.1),冰 = 浅蓝 (0.4, 0.8, 1),毒 = 绿 (0.35, 0.9, 0.3),电 = 紫 (0.75, 0.4, 1)。
- 着色强度 = 0.3 + 0.2 × 层数,即 1/2/3 层 = 50% / 70% / 90%(基色向元素色插值的比例),逐档明显加重。
- 所有元素层数清零后恢复基色;只有主导元素或层数变化时才重涂。
- 基色在首次着色前采样缓存;若外观被外部整体改写(如渊海兽破物理甲露弱点变红,
NormalMonster.cs),由改写方调用重采接口(RecaptureBase)丢弃缓存、下次着色重采,避免状态结束后把弱点变色还原掉。
以上颜色与强度均为 StatusEffectVisual.cs 代码常量。
公式与数值(集中表格)
Section titled “公式与数值(集中表格)”汇总公式:
升层几率 = 层基础几率(0.9 / 0.5 / 0.25) × (1 − 抗性) × 浓度,封顶 1.0质变判定几率 = 0.25 × (1 − 抗性) × 浓度反应威力 P = 引爆时对方元素层数 + 1(取值 2~4)动作效率 = (1 − 冰减速) × (1 − 电减速);冻结时 = 0怪物移速倍率 = 动作效率 × 打断瞬时乘子(0/1) × debuff 移动乘子麻痹传导几率 = 层基础几率(0.3 / 0.5 / 0.8) × (1 − 抗性 × 0.5)蒸汽云伤害倍率 = min(3, 1 + 0.5 × 区域内累计停留秒数)区域 tick 伤害 = 每秒伤害包 × tick 实际秒数 × 停留倍率喷射实际浓度 = 浓度 × max(0, 1 − 每米衰减度 × 距离)命中偏移半径 = (1 − 命中乘子) × 4 米元素系统全部可调常量(均为代码常量,文件:StatusTuning.cs,需程序改):
| 常量 | 值 | 含义 |
|---|---|---|
LayerChanceL1 / L2 / L3 |
0.9 / 0.5 / 0.25 | 升第 1/2/3 层基础几率 |
TransformChance |
0.25 | 满层质变判定几率(复用 L3 档) |
DefaultDuration |
4 秒 | 元素状态持续时间(占位) |
FireDotPerSecond |
0 / 2 / 5 / 10 点/秒 | 点燃 DoT(按层) |
PoisonDotPerSecond |
0 / 1 / 2 / 4 点/秒 | 腐蚀 DoT(按层) |
IceSlow |
0 / 30% / 60% / 90% | 冷冻减速(按层) |
LightningSlow |
0 / 10% / 25% / 50% | 麻痹减速(按层) |
LightningInterruptChance |
0 / 10% / 25% / 50% | 麻痹打断几率(按层) |
ParalysisInterruptCheckInterval |
0.6 秒 | 麻痹打断判定间隔 |
ParalysisInterruptDuration |
0.35 秒 | 单次打断定身时长 |
ExplosionBaseDamage |
10 点/威力 | 火+毒爆炸物理伤害系数 |
FrostArmorStripPerPower |
15 点/威力 | 冰+毒削物理护甲系数 |
FrostVulnPerPower |
0.2 /威力 | 冰+毒易碎增量系数 |
FreezeDuration |
2 秒 | 冰质变冻结时长(霜蚀易碎共用此时长) |
FreezeVulnerability |
×3 | 冻结期物理易碎倍率 |
UncontrolledFlameBurstDamage |
30 点 | 火质变自身火爆发 |
CorrosionBurstDamage |
20 点 | 毒质变自身毒爆发 |
SteamZoneDuration |
4 秒 | 蒸汽云/毒雾持续时间(共用) |
SteamDpsPerPower |
3 点/秒/威力 | 蒸汽云每秒伤害系数 |
SteamRampPerSecond |
+50%/秒 | 蒸汽云停留递增速率 |
SteamMaxMultiplier |
×3 | 蒸汽云递增上限 |
OverloadTerminationChance |
30% | 过载链式每跳终止概率 |
OverloadMaxHopsGuard |
32 跳 | 链式跳数安全上限 |
OverloadSelfImmobilizeDuration |
1 秒 | 过载后自身定身 |
ParalysisSpreadPartnerLayers |
2 层 | 任意+电反应给邻居叠加的伴随元素层数 |
SpreadTickInterval |
1 秒 | 被动传播判定间隔 |
FireSpreadRadius |
4 米 | 点燃蔓延半径 |
CorrosionContactRadius |
2 米 | 腐蚀接触半径 |
FireSpreadChance |
0 / 15% / 35% / 70% | 点燃蔓延几率(按源层) |
CorrosionContactChance |
0 / 20% / 50% / 100% | 腐蚀传播几率(按源层) |
ParalysisConductBaseChance |
0 / 30% / 50% / 80% | 麻痹传导基础几率(按源层) |
ParalysisConductRange |
0 / 3 / 5 / 8 米 | 麻痹传导范围(按源层) |
ParalysisConductResistanceFactor |
0.5 | 抗性对麻痹传导的半效系数 |
其他文件中的相关常量:
| 常量/参数 | 值 | 文件 | 含义 |
|---|---|---|---|
AreaRadius |
4 米 | StatusEffectController.cs(字段默认值,组件为运行时挂载) |
质变/反应范围施放半径 = 区域危害半径 |
| 区域危害 tick 间隔 | 0.5 秒 | StatusEffectController.cs(SpawnHazardZone 调用参数) |
毒雾/蒸汽云伤害判定间隔 |
ElementalLeakBase |
20% | CombatTuning.cs |
元素护甲未破时基础渗透比例 |
ArmorLinkDropFraction |
50% | CombatTuning.cs |
护甲联动掉落比例(霜蚀崩甲会触发) |
| 着色强度 | 0.3 + 0.2 × 层数 | StatusEffectVisual.cs |
元素着色插值比例 |
| 命中偏移系数 | 4 米 | NormalMonster.cs(FireRanged 内写死) |
命中削减词条的最大偏移半径 |
弹药元素载荷(AmmoCatalog.cs,代码静态表,注释明确“数值定型后可迁 CSV”——当前没有任何元素数值在 CSV 配置表中):
| 弹种(数字键) | 物理伤害乘子 | 元素载荷 | 备注 |
|---|---|---|---|
| 动能火/冰/毒/电弹(1-4) | ×1.0 | 对应元素 4 点 | 标准弹手感,元素是点缀 |
| 火焰/寒霜/剧毒/闪电弹(5-8) | ×0.4 | 对应元素 10 点 | 叠层/反应主力,破甲乏力 |
| CannonShell 炮弹 | ×1.0 | 无 | 附加反建筑词条(对建筑 ×1.5) |
| AA_Gun_Bullet 防空弹 | ×1.0 | 无 | 附加反生物词条(对生物 ×1.5) |
弹药档案在装填/切档时由 WeaponConsumption.cs 查表应用到投射策略,发射时逐颗弹丸注入(ProjectileShootingStrategy.cs → Bullet.ApplyAmmoModifiers)。
与其他系统的交互
Section titled “与其他系统的交互”- 武器与弹药:元素的主要施加来源。弹药档案(
AmmoProfile.cs/AmmoCatalog.cs)决定每发弹丸附带的元素类型与载荷量;喷射式武器按浓度持续施加。 - 伤害与护甲:所有元素 DoT、质变爆发、反应爆炸、区域伤害都走同一个伤害结算管线(护甲门、抗性渗透、护甲联动、易碎);冻结/霜蚀的易碎倍率每帧由状态控制器同步进防御档案,放大物理通道伤害;霜蚀脆化直接削物理护甲并可触发护甲联动。
- 怪物:怪物生成时自动挂状态控制器与着色组件;护甲/抗性按怪物类型查静态表;冷冻/麻痹/冻结通过移速倍率作用于怪物移动与攻击节奏;渊海兽破甲露弱点的变色与元素着色共用渲染器,靠重采基色接口协调。
- 建筑:建筑同样承受元素状态(可被点燃/腐蚀/冻结并着色),与生物处于同一传播网络——着火的怪可以点燃建筑,着火的建筑可以再点燃路过的怪;建筑无护甲无抗性(默认全 0)。
- 船员:船员不承受元素状态(无状态控制器),但弹药元素通道直伤与区域危害(毒雾/蒸汽云)照常扣血;火+毒爆炸等范围效果只作用于带状态控制器的目标,波及不到船员。
- 生产与制作:建筑停转词条期间生产组件完全暂停推进。
- 开发者工具:
DevToolsManager.cs提供“对附近怪施加元素”调试命令——以玩家船为中心 30 米内全部怪各做一次指定元素的强制成功命中(色子固定投 0,走标准入口,因此连续调用可以驱动叠层→质变→反应全链路)。
配置与调参指南
Section titled “配置与调参指南”| 想调什么 | 改哪里 | 类型 |
|---|---|---|
| 叠层几率、各层 DoT/减速/打断、质变与反应全部数值、传播几率/半径/间隔、状态持续时间 | Assets/Scripts/Service/Combat/Model/StatusTuning.cs |
代码常量,需程序改 |
| 某弹药的元素类型/载荷量/物理乘子/附加词条 | Assets/Scripts/Service/Weapon/Model/AmmoCatalog.cs 静态表 |
代码常量,需程序改 |
| 某弹丸的元素浓度、出厂元素构成、平行 debuff 词条、物理词条 | 对应弹丸 prefab 上 Bullet.cs 的序列化字段 |
Unity Inspector |
| 喷射武器的元素类型、浓度、每米衰减度、每秒伤害、最大喷射距离 | 对应喷射 prefab 上 FlameProjectile.cs 的序列化字段 |
Unity Inspector |
| 某怪物的元素抗性/双护甲 | Assets/Scripts/Service/Monster/Combat/MonsterCombatProfile.cs |
代码常量,需程序改 |
| 质变/反应/区域危害的作用半径 | StatusEffectController.cs 的 AreaRadius 字段默认值(组件为运行时挂载,prefab/Inspector 改不到) |
代码常量,需程序改 |
| 区域危害 tick 间隔 | StatusEffectController.cs 的 SpawnHazardZone 调用参数(当前 0.5 秒) |
代码常量,需程序改 |
| 元素着色的颜色与层数强度 | Assets/Scripts/Service/Combat/Core/StatusEffectVisual.cs |
代码常量,需程序改 |
| 元素护甲渗透比例、护甲联动比例 | Assets/Scripts/Service/Combat/Model/CombatTuning.cs |
代码常量,需程序改 |
注意:本系统目前零 CSV 配置——所有数值都在代码里(设计阶段粗调策略,playtest 后定型再考虑迁表,AmmoCatalog.cs 与 MonsterCombatProfile.cs 注释均有此说明)。
已知限制与注意事项
Section titled “已知限制与注意事项”- 船员不承受元素状态:船员没有挂载状态控制器,叠层/质变/反应/传播对船员一律静默落空;但元素伤害通道的直伤和区域危害照常扣船员血。设计文档中“点燃在生物与生物间传播”“腐蚀从建筑传给使用它的生物”对船员尚未生效。
- 持续时间是占位值:所有路径固定 4 秒(
StatusTuning.DefaultDuration),代码注释标明“Phase 4 运行时按武器/浓度细化”,尚未与武器/弹药参数挂钩。设计文档中腐蚀“持续时间长/超长持续”按层数递增的设定也未实现——四元素全部统一 4 秒。 - 范围效果与区域危害不分敌我:质变扩散、火毒爆炸、蒸汽云、毒雾、被动传播全部用物理球形检测、无阵营过滤——己方建筑会被波及(直伤+状态);己方船员只被区域危害(毒雾/蒸汽云)扣血,质变扩散/火毒爆炸/被动传播因只收集带状态控制器的目标而波及不到船员。
- 范围/区域/DoT 伤害不计归因:这些伤害走
TakeStatusDamage(DamageableComponent.cs),不发伤害归因消息——不计入声望系统与击杀归因;同时受无敌模式拦截。 - 火+毒爆炸不伤反应宿主:爆炸伤害只施加给 4 米内的邻居,被引爆的目标自身只损失身上的元素层数,不吃这 10 × P 点物理伤害。
- 失控烈焰扩散是覆盖式:对邻居随机 0~3 层点燃是直接设置层数而非叠加——25% 概率投出 0 层,会把邻居已有的点燃直接清掉;投出的层数低于邻居现有层数时也会压低。
- 腐蚀传播与设计文档有差异:设计为“生物移动/交互时传播给建筑、从建筑传给使用者”,实现为简单的 2 米近距接触周期判定(不区分是否在交互)。
- 麻痹“所有动作效率减益”只接入了怪物:动作效率乘子目前仅怪物移动/攻击消费;麻痹打断也只在
NormalMonster.cs实现(打断期间移动与攻击同时暂停)。建筑/船员的工作效率不受麻痹影响。 - 建筑停转词条只停生产:
BuildingDisable的唯一消费点是ProductionComponent.cs;武器建筑、其他功能建筑不受停转影响(没有消费点)。 - 过载链式是简化实现:对 4 米范围内收集到的前 N 个邻居各 +1 层麻痹,没有真实的逐跳传导路径与跳间距离判定(设计文档描述为“电击在物体之间来回传播”)。
- 元素层数到期一次清空:没有逐层衰减曲线,3 层状态在最后一刻仍是满强度。
- 着色直接改材质颜色:与受击闪白、渊海兽弱点变红等其他变色逻辑共用渲染器,外观被整体改写后必须调用重采接口(
RecaptureBase),否则状态结束恢复时会回到错误的基色。 - 测试弹药不进经济循环:
TestAmmo_*八种弹药仅配合无限弹药测试用,不消耗物品、不进生产链(AmmoCatalog.cs)。 - 无敌模式已知 TODO(
DamageableComponent.cs):建筑无敌模式不检查阵营,开启后敌方建筑也免疫元素 DoT 与一切伤害。