# 06 · 形态系统规范 > **所属文档集** [← 返回索引](./README.md) > **摘要**:三形态(天魂/地魂/命魂)的数据模型、切换契约、武器适配与技能体系。 --- ## 目录 1. [形态设计目标](#1-形态设计目标) 2. [形态数据模型](#2-形态数据模型) 3. [形态切换契约](#3-形态切换契约) 4. [三形态规格表](#4-三形态规格表) 5. [技能体系](#5-技能体系) 6. [武器与形态联动](#6-武器与形态联动) 7. [形态配置参数](#7-形态配置参数) --- ## 1. 形态设计目标 | 目标 | 说明 | |------|------| | **风格差异化** | 三形态提供截然不同的战斗体验,不仅仅是皮肤替换 | | **情境适应** | 不同区域/敌人类型鼓励不同形态,但不强制 | | **无缝切换** | 切换不中断当前动作,下次输入时生效 | | **可扩展** | 新增形态只需新增数据,不需要修改现有逻辑 | --- ## 2. 形态数据模型 ``` DataModel FormData { formId : ID // 形态唯一标识(如 "SkyForm") displayName : String // 显示名称("天魂") description : String // 一句话描述 accentColor : Color // HUD/特效色调 ────────────────────────────────── defaultWeapon : Ref // 默认武器(连击动画+伤害来源+判定尺寸) soulSkill : Ref // 魂技能(消耗灵力) spiritSkill1 : Ref // 魄技能 1(消耗魄元) spiritSkill2 : Ref // 魄技能 2(消耗魄元) ────────────────────────────────── switchAnimation : Optional // 切换前摇动画(无则立即切换) unlockCondition : Optional> // 解锁条件(null=初始可用) } ``` ``` DataModel WeaponData { weaponId : ID formId : ID // 归属形态 ────────────────────────────────── attack1Anim : AnimationID // 第一击动画 attack2Anim : AnimationID // 第二击动画 attack3Anim : AnimationID // 第三击动画 airAttackAnim : AnimationID upAttackAnim : AnimationID downAttackAnim : AnimationID ────────────────────────────────── hitBoxConfig : List // 各攻击段的判定区域规格 damageMultipliers: Map // 各攻击段伤害倍率 } ``` --- ## 3. 形态切换契约 ### 3.1 切换输入映射 | 输入槽 | 默认形态 | 说明 | |--------|---------|------| | 槽位 0 | 天魂(SkyForm)| 键位 1 / 手柄方向键左 | | 槽位 1 | 地魂(EarthForm)| 键位 2 / 手柄方向键下 | | 槽位 2 | 命魂(DeathForm)| 键位 3 / 手柄方向键右 | > **设计决策**:使用有序槽位而非形态枚举 > **原因**:未来新增第四形态时,只需增加新输入槽和新 FormData,不改变现有逻辑 ### 3.2 切换时机 ``` 玩家按下形态切换键 → 目标形态 = 对应槽位的 FormData 目标形态 == 当前形态? ├─ 是 → 忽略输入 └─ 否 → 目标形态有切换前摇动画? ├─ 是 → 播放前摇,前摇完成后切换 └─ 否 → **立即** 更新 CurrentForm(不中断当前动作) → 发出 OnFormChanged 事件(传入新 FormData) → WeaponSlot 接收事件,自动切换为新形态的默认武器 → 下次攻击/技能输入时,使用新形态的动画和参数 ``` ### 3.3 切换的"无缝"原则 - 切换**本身无前摇**(默认配置下) - 当前动作(如攻击、冲刺)**不被打断** - 下一次攻击输入才体现新形态效果 - 技能(魂技能/魄技能)绑定于形态,切换后技能槽内容随之改变 --- ## 4. 三形态规格表 ### 4.1 天魂形态(SkyForm) | 属性 | 规格 | |------|------| | 战斗风格 | 轻快连击,空中机动性强 | | 攻击判定 | 较小范围,近身贴脸 | | 连击特点 | 第三击向上抛起敌人 | | 魂技能 | **天光斩**:前冲斩击,穿透多个敌人,灵力消耗 100 | | 魄技能 1 | **天翔步**:瞬间向上跳跃(额外跳),魄元消耗 40 | | 魄技能 2 | **灵鸟护体**:短暂无敌 + 反伤护盾,魄元消耗 70 | | 定位 | 灵活流,擅长空中平台战斗 | ### 4.2 地魂形态(EarthForm) | 属性 | 规格 | |------|------| | 战斗风格 | 重击范围大,霸体强 | | 攻击判定 | 较大范围,有前置停顿 | | 连击特点 | 第三击震地,范围伤害 | | 魂技能 | **大地震怒**:跳起落下产生冲击波,灵力消耗 100 | | 魄技能 1 | **岩甲护卫**:护盾层(吸收 X 点伤害),魄元消耗 50 | | 魄技能 2 | **地裂踏**:踏地减速附近敌人,魄元消耗 60 | | 定位 | 坦克流,擅长对峙 Boss 和密集敌人 | ### 4.3 命魂形态(DeathForm) | 属性 | 规格 | |------|------| | 战斗风格 | 中等速度,弹反增益显著 | | 攻击判定 | 适中范围,攻击后有追加效果 | | 连击特点 | 每击命中后留下诅咒标记,第三击引爆全部标记 | | 魂技能 | **命魂索链**:召唤锁链束缚最近敌人,灵力消耗 100 | | 魄技能 1 | **命魂反噬**:下次弹反触发额外爆炸伤害,魄元消耗 45 | | 魄技能 2 | **命域领域**:短暂降低附近敌人攻击力,魄元消耗 65 | | 定位 | 弹反流,弹反策略强化,适合精通玩家 | --- ## 5. 技能体系 ### 5.1 技能数据模型 ``` DataModel SkillData { skillId : ID skillName : String description : String resourceType : ResourceType // SoulPower 或 SpiritPower resourceCost : Integer // 消耗量 ────────────────────────────────── castAnimation : AnimationID // 前摇动画 castDuration : Duration // 前摇时长 effectDelay : Duration // 前摇结束后效果开始的延迟 ────────────────────────────────── effectType : SkillEffectType effectParams : Map // 效果参数(因技能类型而异) ────────────────────────────────── canCastAirborne : Boolean // 是否可在空中施放 interruptible : Boolean // 前摇是否可被打断(冲刺/受伤仍可打断) } ``` ### 5.2 技能效果类型 | 类型 | 说明 | 典型参数 | |------|------|---------| | `Projectile` | 发射弹射物 | `speed`, `damage`, `piercing` | | `Melee` | 近战范围攻击 | `radius`, `damage`, `knockback` | | `Shield` | 护盾效果 | `absorbAmount`, `duration` | | `Buff` | 正面增益 | `buffType`, `duration`, `magnitude` | | `Debuff` | 负面施加 | `debuffType`, `duration`, `radius` | | `Summon` | 召唤实体 | `entityId`, `duration`, `count` | | `Mobility` | 移动型技能 | `distance`, `direction`, `invincible` | ### 5.3 资源消耗规则 | 资源类型 | 消耗时机 | 失败处理 | |---------|---------|---------| | 灵力 | 技能执行前检查,通过则立即扣除 | 不足时技能键无响应 | | 魄元 | 技能执行前检查,通过则立即扣除 | 不足时技能键无响应 | --- ## 6. 武器与形态联动 ### 6.1 武器切换流程 ``` OnFormChanged 事件触发 → WeaponSlot 更新为新形态的 defaultWeapon → CombatHandler 刷新以下内容: ├─ 当前连击段的动画片段 ├─ HitArea 尺寸与偏移 ├─ DamagePacket 中的伤害倍率来源 └─ 重置连击计数器(ComboState → None) ``` ### 6.2 护符武器覆盖 特定护符可覆盖某形态的默认武器(只改变该形态): - 护符持有 `WeaponData` 引用 - 装备时:对应槽位的 `FormData.defaultWeapon` 临时被护符武器替代 - 卸装时:恢复原 `FormData.defaultWeapon` --- ## 7. 形态配置参数 | 参数 | 说明 | |------|------| | 三形态 FormData | 见第 4 节规格表 | | 各形态武器 HitBox 尺寸 | 在各 WeaponData 中配置 | | 技能消耗量 | 在各 SkillData 中配置 | | 技能前摇时长 | 在各 SkillData 中配置 | > **扩展原则**:新增形态时,只需: > 1. 创建新的 `FormData`(含武器和技能引用) > 2. 将其加入形态配置列表的新槽位 > 3. 为新槽位绑定输入键位 > > 无需修改任何现有系统逻辑。