Files
pixelheros/assets/script/Design3.md
panw 9d17707c3b docs(设计文档): 补充天赋系统与英雄属性的边界定义
明确属性型与机制型天赋的区别,建立配置规范:
1. 属性型效果必须使用 Attrs 作为 Key
2. 机制型效果需使用独立枚举 Mechanic
3. 新增配置校验规则避免误用
2025-12-31 09:30:11 +08:00

7.5 KiB
Raw Blame History

技能系统优化建议Design3

目标:在尽量少改代码的前提下,把技能的“可配置性、可扩展性、可组合性”拉起来,让新增技能与 build 更容易产出差异。

一、先修复会直接抹平 build 的关键问题(优先级最高)

  1. 攻速/技速对 CD 生效
  • 问题HeroSkills.resetCD 先按 AS/SS 计算 cd但随后又覆盖回 cd_max导致 AS/SS 永远不影响技能循环。
  • 结果:攻速流、技速流、触发流的 build 直接被抹平。
  1. 统一百分比/概率单位体系
  • 现状:
    • 概率判定使用 0100checkChance
    • add_hp/add_mp 的百分比逻辑按 01value * HP_MAX
    • 配置层TDLevelOptions、TalSet同时出现 0.14 表示 14% 的写法。
  • 建议:所有“概率/百分比”统一用 0100 的“百分比点数”,显示与逻辑一致。
  1. 天赋 count 配置生效 + 天赋 key 统一
  • 问题:
    • Count 容易失效:如果 TalComp.addTal 中把 count 写死为 1,配置表 talConf.count 就会被忽略。例如“下 5 次暴击”的天赋会退化为“下 1 次暴击”。
      • 校验点:this.Tals[uuid].count 必须来自 tConf.count,而不是常量。
    • Key 混用导致逻辑断裂
      • 写入方:TalComp 使用 TalEffet 枚举值写入(如 TalEffet.DMG_RED = 10)。
      • 读取方:HeroAtkSystem 使用 Attrs 枚举值读取(如 Attrs.DMG_RED = 24)。
      • 结果:天赋效果写入了错误的 Key如 Key 10 对应 Attrs.AP),导致真正的伤害减免逻辑(读 Key 24读不到数据天赋完全失效。
  • 建议:
    • 废弃 TalEffet 中的 Key 定义,统一使用 Attrs 枚举作为 Key。
    • TalComp.addTal 中读取 tConf.count 写入 talent.count,并保证所有“次数型天赋”的消耗端也使用同一套 Key。

补充TalSet 与 HeroAttrs 的“可一一对应”边界(避免后续继续混淆)

  • 结论:可以建立一一对应,但必须先把“键域”拆开。

    • 重要澄清:“有条件触发”不等于“机制型”
      • TriType/Trigger 只决定“什么时候触发”;
      • “属性型/机制型”决定“触发后往哪里写数据、怎么被消耗”。
    • 属性型效果(可一一对应):所有本质是“修改某个战斗属性”的天赋,统一用 Attrs 作为唯一 Key。
      • 例:减伤 -> Attrs.DMG_RED,反伤 -> Attrs.THORNS,风怒倍率/风怒触发相关如果要做成属性,也应落到 Attrs.WFUNY
      • 这一类天赋的表现形式建议只允许数值型VALUE或百分比型RATIO的叠加/消耗。
    • 机制型效果(不可强行一一对应):本质是“改变行为/流程”的天赋,不要硬塞进 Attrs,而应该走独立的机制 Key。
      • 下次技能额外释放D_SKILL、下 N 次普攻必暴C_ATK、下 N 次技能必暴C_SKILL。这些不是“暴击率+X%”,而是“保证命中事件改写”,语义不同。
      • 强行映射到 Attrs.CRITICAL 会造成策划误配:玩家以为是概率加成,但实际是保底机制,体验会断层。
  • 推荐的设计规范(给策划与程序统一语言):

    • 字段含义固定化
      • effet 只表达“这是属性型还是机制型”。
      • key 才是具体作用目标:属性型 key = Attrs.*;机制型 key = Mechanic.*(独立枚举,值域不与 Attrs 重叠)。
    • 配置校验规则
      • 只要是属性型天赋:必须能在 HeroAttrs.ts 找到同名或同义的 Attrs;找不到就不允许配置。
      • 只要是机制型天赋:必须有对应的消耗点(例如攻击/技能系统里明确消耗一次),否则 count 只会累加成“无效库存”。
      • 现状提醒:TalAttrs 的确已经把一部分属性(冻结/眩晕/击退/沉默/暴击等)映射到 Attrs,但这只覆盖了 BUFF 这类“属性叠加”分支;计数型效果如果仍用 TalEffet 作为 Key就会再次出现写入/读取不一致。

二、把 SkillSet 变成“少字段但强表达”的可配置系统

当前 SkillConfig 字段很多但真正稳定生效的只有少数ap/map/DType/RType/EType/speed/dis/hit/cd/cost/sp_name

建议把技能配置分成两层:

  • 核心战斗字段(必须生效):

    • 伤害ap/map + DType
    • 弹道RType + speed + dis
    • 命中hit穿透次数
    • 生命周期EType建议只保留 animationEnd/collision 两类,其他先不让配)
  • 扩展字段(等系统补齐后开放):

    • 多目标t_num/hit_num
    • DOThitcd + timeEnd
    • buff/debuffbuffs/neAttrs + chance
    • 前摇/结束动画ready/EAnm/DAnm

做法:短期不改字段也可以,但在设计上约束“哪些字段可用、哪些字段暂不承诺”。

三、用“技能变体SkillID 替换)”快速放大组合数(最划算)

你现在每个英雄主动技能数量少(技能+大招),想提高 build 兴趣,不要一口气做几十个新技能。

建议:每个技能做 24 个“配置变体”,通过替换 s_uuid 实现。

示例:

  • 火球(基础) -> 爆裂火球(碰撞盒更大) -> 穿透火球hit 更高) -> 集束火球(低伤多发)
  • 风刃(基础) -> 远程风刃dis 更长) -> 快速风刃speed 更高hit 较低) -> 重刃map 更高speed 更低)

收益:

  • 不依赖 t_num/hit_num/buffs/neAttrs 等未落地字段。
  • 组合数近似按“技能变体数 × 天赋组合 × 强化路径”指数增长。

四、把天赋从“加数值”升级为“改机制”(触发器 + 处理器)

现状TriType 很全,但实际只在 ATK/SKILL/MAX 更新触发DMG/HPL/LUP 等缺来源。

建议的最小升级:

  1. 先把触发源补齐:
  • DMG受伤时更新
  • LUP升级时更新
  • HPL/HPA血量变化达到阈值更新
  • DEAD击杀/死亡时更新
  1. 天赋效果以“机制改造”为主:
  • 下一次技能额外释放一次
  • 下一次必暴/必定击退
  • 技能变体替换(把 s_uuid 换成强化版本)
  • 元素转化(把 DType 从 ATK 改成 FIRE 等,形成元素 build

这样即使每局只拿 4 个天赋,组合也会很丰富。

五、给技能增加“关键词Tag”让天赋可泛化中期目标

建议新增 tags概念层

  • Projectile / Melee / AoE / Beam
  • Element: Fire/Ice/Wind/Phys
  • Utility: Control/Sustain/Burst/Clear

天赋用 tags 做筛选:

  • “所有 Projectile 分裂 +1”
  • “所有 Fire 技能命中后额外一次伤害(或改成更大碰撞体)”
  • “所有 AoE 范围 +20%”

收益一个天赋能作用多个技能build 会自然爆炸。

六、让技能表现更稳定的工程建议(减少体验噪音)

  1. 明确技能销毁策略
  • 推荐只支持:
    • animationEnd动画结束销毁
    • collision碰撞触发销毁或 hit 次数耗尽销毁)
  1. 统一命中次数规则
  • 只保留一个概念pierce命中次数上限
  • 技能用 hit 表达基础穿透,角色属性用 PUNCTURE 叠加。
  1. 技能范围命中逻辑选择一种实现并固定
  • 方案A完全靠碰撞体推荐少代码
  • 方案B施法阶段选目标t_num/hit_num但必须补齐对应系统否则不要给策划配。

七、推荐落地顺序(两周内能看到 build 明显变丰富)

  1. 修复CD 计算、单位体系、天赋 count/key
  2. 新增:每个主技能 23 个变体SkillID 替换)
  3. 补齐DMG/LUP/HPL 等触发源,让天赋真正“可构筑”
  4. 扩展tags + 泛化天赋