docs: 添加技能系统优化设计方案文档
添加 Design2.md 和 Design3.md 详细设计方案文档,包含技能系统优化建议和扩展设计 更新 todo.md 记录当前系统存在的关键问题
This commit is contained in:
142
assets/script/Design2.md
Normal file
142
assets/script/Design2.md
Normal file
@@ -0,0 +1,142 @@
|
|||||||
|
|
||||||
|
# 技能扩展设计(Design2)
|
||||||
|
|
||||||
|
目标:在不大改现有战斗链路的前提下,补齐“清杂效率、单体爆发、控场节奏、团队辅助”四类技能,并明确哪些可以用当前实现直接落地,哪些需要补系统。
|
||||||
|
|
||||||
|
## 当前实现可直接复用的能力边界(落地约束)
|
||||||
|
|
||||||
|
现有技能链路(配置 -> 生成预制体 -> 移动/碰撞 -> 伤害队列 -> 伤害结算)里,稳定可用的核心参数:
|
||||||
|
|
||||||
|
- 伤害:ap/map + DType(物理/冰/火/风)
|
||||||
|
- 弹道/定位:RType(linear/bezier/fixed/fixedEnd)+ speed + dis
|
||||||
|
- 命中/穿透:Skill.hit 与 Attrs.PUNCTURE(用于销毁条件)
|
||||||
|
- 结束:EType.animationEnd / EType.collision(其它结束类型目前不可靠)
|
||||||
|
|
||||||
|
结论:
|
||||||
|
|
||||||
|
- 现在最稳的技能形态是“单体投射物/直线穿透投射物/定点生成的近战或AOE碰撞体”。
|
||||||
|
- DOT、真正的多目标选取(t_num/hit_num)、技能附带 buff/debuff(SkillSet.buffs/neAttrs)目前不建议依赖配置直接实现,除非补齐系统。
|
||||||
|
|
||||||
|
## 技能扩展的设计原则(少可用 + 构筑驱动)
|
||||||
|
|
||||||
|
- 每个技能只强化 1 个核心体验:清线、爆发、控场、续航、保命。
|
||||||
|
- 每个技能至少与 1 个属性/天赋形成明确联动:CRITICAL、PUNCTURE、元素 POWER/RES、AS/SS、HIT/命中等。
|
||||||
|
- 避免“纯数值换皮”:同元素也要在弹道/站位/命中方式上区分。
|
||||||
|
|
||||||
|
## 可新增技能清单(可直接落地 / MVP)
|
||||||
|
|
||||||
|
下列技能都可以只靠“新预制体 + SkillSet 配置”落地(不要求新增系统逻辑)。
|
||||||
|
|
||||||
|
### 1) 物理系(稳定通用)
|
||||||
|
|
||||||
|
1. 旋风斩(近身持续打击)
|
||||||
|
- 定位:近战清杂
|
||||||
|
- 形态:fixed(在施法者脚下生成一个较大的碰撞体)+ EType.collision
|
||||||
|
- 关键配置建议:
|
||||||
|
- ap:60~90(偏低,靠命中频率/覆盖面)
|
||||||
|
- dis:短
|
||||||
|
- hit:高(或 DTType=range 让其不因 hit_count 立刻销毁)
|
||||||
|
- 联动:吸血(LIFESTEAL)、减伤(DMG_RED)、攻速(AS)
|
||||||
|
|
||||||
|
2. 贯穿突刺(直线穿透)
|
||||||
|
- 定位:直线清线 + 站位技能
|
||||||
|
- 形态:linear + EType.collision + hit=2~4
|
||||||
|
- 关键配置建议:
|
||||||
|
- ap:80~110
|
||||||
|
- speed:高
|
||||||
|
- dis:中
|
||||||
|
- 联动:PUNCTURE(额外命中次数提升收益明显)
|
||||||
|
|
||||||
|
3. 回旋镖(往返打两段)
|
||||||
|
- 定位:中距离稳定清杂
|
||||||
|
- 形态:bezier(或 linear)做去程;回程用“再生成一次同技能”模拟
|
||||||
|
- MVP落地方式:先不做真正回程,先做“穿透数较高的慢速投射物”形成近似体验
|
||||||
|
- 联动:命中(HIT)、暴击(CRITICAL)
|
||||||
|
|
||||||
|
### 2) 火系(爆发/压制)
|
||||||
|
|
||||||
|
4. 爆裂火球(单体命中小范围)
|
||||||
|
- 定位:点杀 + 顺带清杂
|
||||||
|
- 形态:linear + collision,预制体碰撞盒比普通火球略大
|
||||||
|
- 关键配置建议:
|
||||||
|
- map:90~130
|
||||||
|
- speed:中
|
||||||
|
- dis:中
|
||||||
|
- 联动:FIRE_POWER
|
||||||
|
|
||||||
|
5. 火雨(定点覆盖)
|
||||||
|
- 定位:控场清杂
|
||||||
|
- 形态:fixedEnd(在目标位置生成持续碰撞体)+ EType.collision
|
||||||
|
- MVP注意:持续时间目前缺少可靠 timeEnd 逻辑,建议先做“命中次数上限很高的短暂停留”或“动画结束销毁”。
|
||||||
|
- 联动:范围(AOE/AREA_OF_EFFECT 若后续启用)、FIRE_POWER
|
||||||
|
|
||||||
|
### 3) 冰系(节奏控制)
|
||||||
|
|
||||||
|
6. 冰锥连射(高速多发)
|
||||||
|
- 定位:远程清杂
|
||||||
|
- 形态:多次 createSkill(同技能短间隔连发),每发 linear + collision
|
||||||
|
- 关键配置建议:
|
||||||
|
- map:40~70(单发低,靠数量)
|
||||||
|
- cd:略长
|
||||||
|
- 联动:技速(SS)、命中(HIT)
|
||||||
|
|
||||||
|
7. 冰环(近身保命)
|
||||||
|
- 定位:近战保命
|
||||||
|
- 形态:fixed(脚下大碰撞体)+ animationEnd
|
||||||
|
- 关键配置建议:
|
||||||
|
- map:60~100
|
||||||
|
- dis:短
|
||||||
|
- 联动:FREEZE_CHANCE(后续补状态系统时收益巨大)
|
||||||
|
|
||||||
|
### 4) 风系(机动/穿透)
|
||||||
|
|
||||||
|
8. 风刃(远程穿透清线)
|
||||||
|
- 定位:清线核心技
|
||||||
|
- 形态:linear + collision + hit=3~6
|
||||||
|
- 关键配置建议:
|
||||||
|
- map:70~110
|
||||||
|
- speed:高
|
||||||
|
- dis:长
|
||||||
|
- 联动:WIND_POWER、PUNCTURE
|
||||||
|
|
||||||
|
9. 龙卷(慢速大体积推线)
|
||||||
|
- 定位:慢速压制
|
||||||
|
- 形态:linear(慢速)+ 大碰撞体 + collision
|
||||||
|
- 关键配置建议:
|
||||||
|
- map:50~80
|
||||||
|
- speed:低
|
||||||
|
- hit:高
|
||||||
|
- 联动:减速(SLOW_CHANCE)(后续补状态系统)
|
||||||
|
|
||||||
|
## 需要补系统才能“做得正确”的技能(建议后续阶段)
|
||||||
|
|
||||||
|
这些技能不建议只靠预制体硬做,因为会出现:命中次数不可控、重复碰撞、效果不稳定或配置字段无效。
|
||||||
|
|
||||||
|
1) DOT/持续伤害(需要 hitcd + 生命周期)
|
||||||
|
- 需求:按 hitcd 定时对范围内目标结算伤害,且要有可靠的 timeEnd。
|
||||||
|
|
||||||
|
2) 真正的多目标选择(t_num/hit_num)
|
||||||
|
- 需求:在施法阶段选取 N 个目标/范围内前 N 个目标,逐个派生技能或派发伤害。
|
||||||
|
|
||||||
|
3) 技能附带 buff/debuff(SkillSet.buffs/neAttrs)
|
||||||
|
- 需求:命中时把 BuffConf/NeAttrsConf 注入到目标 HeroAttrsComp,并支持持续时间与叠加规则。
|
||||||
|
|
||||||
|
4) 召唤类(SType.zhaohuan)
|
||||||
|
- 需求:召唤实体的生命周期、仇恨/站位、继承部分属性、与波次清理联动。
|
||||||
|
|
||||||
|
## 推荐的“技能池”结构(便于后续配表)
|
||||||
|
|
||||||
|
- 普攻技能(6001~6099):单体/短穿透,节奏稳定
|
||||||
|
- 一般技能(6100~6999):清线/爆发/控场核心
|
||||||
|
- 被动/触发型技能(5000~5999):反伤、护盾、反击等(靠系统触发)
|
||||||
|
|
||||||
|
## 立刻可落地的最小集合(建议先做这 6 个)
|
||||||
|
|
||||||
|
1) 贯穿突刺(物理穿透)
|
||||||
|
2) 爆裂火球(火系爆发)
|
||||||
|
3) 风刃(风系清线)
|
||||||
|
4) 冰环(近身保命)
|
||||||
|
5) 冰锥连射(远程多发)
|
||||||
|
6) 旋风斩(近战清杂)
|
||||||
|
|
||||||
|
这 6 个的差异足够大,能立刻把构筑方向从“纯堆攻击”拓展到“穿透/元素/控场/攻速”。
|
||||||
123
assets/script/Design3.md
Normal file
123
assets/script/Design3.md
Normal file
@@ -0,0 +1,123 @@
|
|||||||
|
|
||||||
|
# 技能系统优化建议(Design3)
|
||||||
|
|
||||||
|
目标:在尽量少改代码的前提下,把技能的“可配置性、可扩展性、可组合性”拉起来,让新增技能与 build 更容易产出差异。
|
||||||
|
|
||||||
|
## 一、先修复会直接抹平 build 的关键问题(优先级最高)
|
||||||
|
|
||||||
|
1) 攻速/技速对 CD 生效
|
||||||
|
|
||||||
|
- 问题:HeroSkills.resetCD 先按 AS/SS 计算 cd,但随后又覆盖回 cd_max,导致 AS/SS 永远不影响技能循环。
|
||||||
|
- 结果:攻速流、技速流、触发流的 build 直接被抹平。
|
||||||
|
|
||||||
|
2) 统一百分比/概率单位体系
|
||||||
|
|
||||||
|
- 现状:
|
||||||
|
- 概率判定使用 0–100(checkChance)。
|
||||||
|
- add_hp/add_mp 的百分比逻辑按 0–1(value * HP_MAX)。
|
||||||
|
- 配置层(TDLevelOptions、TalSet)同时出现 0.14 表示 14% 的写法。
|
||||||
|
- 建议:所有“概率/百分比”统一用 0–100 的“百分比点数”,显示与逻辑一致。
|
||||||
|
|
||||||
|
3) 天赋 count 配置生效 + 天赋 key 统一
|
||||||
|
|
||||||
|
- 问题:talConf.count 在 TalComp.addTal 中未使用,且计数型天赋写入/读取 key 与 Attrs/TalEffet 混用。
|
||||||
|
- 结果:大量天赋表现不符合描述,玩家感知不到构筑差异。
|
||||||
|
|
||||||
|
## 二、把 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
|
||||||
|
- DOT:hitcd + timeEnd
|
||||||
|
- buff/debuff:buffs/neAttrs + chance
|
||||||
|
- 前摇/结束动画:ready/EAnm/DAnm
|
||||||
|
|
||||||
|
做法:短期不改字段也可以,但在设计上约束“哪些字段可用、哪些字段暂不承诺”。
|
||||||
|
|
||||||
|
## 三、用“技能变体(SkillID 替换)”快速放大组合数(最划算)
|
||||||
|
|
||||||
|
你现在每个英雄主动技能数量少(技能+大招),想提高 build 兴趣,不要一口气做几十个新技能。
|
||||||
|
|
||||||
|
建议:每个技能做 2–4 个“配置变体”,通过替换 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:击杀/死亡时更新
|
||||||
|
|
||||||
|
2) 天赋效果以“机制改造”为主:
|
||||||
|
|
||||||
|
- 下一次技能额外释放一次
|
||||||
|
- 下一次必暴/必定击退
|
||||||
|
- 技能变体替换(把 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 次数耗尽销毁)
|
||||||
|
|
||||||
|
2) 统一命中次数规则
|
||||||
|
|
||||||
|
- 只保留一个概念:pierce(命中次数上限)
|
||||||
|
- 技能用 hit 表达基础穿透,角色属性用 PUNCTURE 叠加。
|
||||||
|
|
||||||
|
3) 技能范围命中逻辑选择一种实现并固定
|
||||||
|
|
||||||
|
- 方案A:完全靠碰撞体(推荐,少代码)
|
||||||
|
- 方案B:施法阶段选目标(t_num/hit_num),但必须补齐对应系统,否则不要给策划配。
|
||||||
|
|
||||||
|
## 七、推荐落地顺序(两周内能看到 build 明显变丰富)
|
||||||
|
|
||||||
|
1) 修复:CD 计算、单位体系、天赋 count/key
|
||||||
|
2) 新增:每个主技能 2–3 个变体(SkillID 替换)
|
||||||
|
3) 补齐:DMG/LUP/HPL 等触发源,让天赋真正“可构筑”
|
||||||
|
4) 扩展:tags + 泛化天赋
|
||||||
@@ -9,3 +9,79 @@
|
|||||||
- 使用事件或 System 把 hp/mp 变更同步给视图组件;
|
- 使用事件或 System 把 hp/mp 变更同步给视图组件;
|
||||||
- 保证 HeroAttrsComp 只处理战斗数值逻辑,不直接操作表现层。
|
- 保证 HeroAttrsComp 只处理战斗数值逻辑,不直接操作表现层。
|
||||||
|
|
||||||
|
2. [问题] SkillSet 目标组枚举命名与注释语义不一致
|
||||||
|
|
||||||
|
- 位置:assets/script/game/common/config/SkillSet.ts 的 TGroup
|
||||||
|
- 现状:Ally/Team 的注释与字面含义相反,容易导致配置选错目标阵营。
|
||||||
|
|
||||||
|
3. [问题] SkillSet 多字段“配置存在但运行时未生效”,易造成误配
|
||||||
|
|
||||||
|
- 位置:assets/script/game/common/config/SkillSet.ts + assets/script/game/skill/SkillView.ts
|
||||||
|
- 现状:t_num/hit_num/hitcd/ready/EAnm/DAnm/buffs/neAttrs 等字段当前链路中基本未进入核心逻辑;hit_num 的范围命中逻辑在 SkillView 中被注释。
|
||||||
|
- 风险:策划以为有效,实际上无效果。
|
||||||
|
|
||||||
|
4. [问题] EType 定义的结束类型 > 实际支持的结束类型
|
||||||
|
|
||||||
|
- 位置:assets/script/game/common/config/SkillSet.ts + assets/script/game/skill/SMoveComp.ts + assets/script/game/skill/SkillView.ts
|
||||||
|
- 现状:distanceEnd/countEnd 等缺少对应实现;SkillView 仅处理 animationEnd;SMoveSystem 仅在 timeEnd/collision 才销毁。
|
||||||
|
- 风险:配置为 distanceEnd/countEnd 可能导致技能不销毁或销毁时机不符合预期。
|
||||||
|
|
||||||
|
5. [问题] “穿透/命中次数”概念重复且实现偏一边
|
||||||
|
|
||||||
|
- 位置:assets/script/game/common/config/HeroAttrs.ts + assets/script/game/common/config/SkillSet.ts + assets/script/game/skill/SkillView.ts
|
||||||
|
- 现状:PIERCE/PUNCTURE 两套概念并存,技能销毁只看 (Skill.hit + Attrs.PUNCTURE),t_num/hit_num 不参与。
|
||||||
|
|
||||||
|
6. [问题] TalSet 的 count 配置未生效
|
||||||
|
|
||||||
|
- 位置:assets/script/game/common/config/TalSet.ts + assets/script/game/hero/TalComp.ts
|
||||||
|
- 现状:talConf 中配置了 count,但 TalComp.addTal() 固定把 count 设为 1。
|
||||||
|
- 风险:如“触发后下10次必爆”等配置实际表现会被压缩为 1 次。
|
||||||
|
|
||||||
|
7. [问题] 天赋触发源不完整:大量 triType 永远不会触发
|
||||||
|
|
||||||
|
- 位置:assets/script/game/hero/SACastSystem.ts + assets/script/game/hero/HeroAtkSystem.ts
|
||||||
|
- 现状:当前只对 ATK/SKILL/MAX 调用 updateCur;DMG/LUP/HPL/HPA/DEAD/INIT 等缺少累计来源。
|
||||||
|
|
||||||
|
8. [问题] TalEffet 执行分支不完整
|
||||||
|
|
||||||
|
- 位置:assets/script/game/hero/TalComp.ts
|
||||||
|
- 现状:TalEffet.SHIELD/THORNS 等枚举存在,但 doTriggerTal 未覆盖或未完整实现。
|
||||||
|
|
||||||
|
9. [问题] 百分比/概率“单位体系”混乱(0-1 与 0-100 混用)
|
||||||
|
|
||||||
|
- 位置:assets/script/game/hero/HeroAtkSystem.ts + assets/script/game/hero/HeroAttrsComp.ts + assets/script/game/common/config/TalSet.ts + assets/script/game/common/config/TDLevelOptions.ts
|
||||||
|
- 现状:战斗概率判定使用 0-100;add_hp/add_mp 的百分比却按 0-1 乘上限;强化池与天赋表里同时出现 0.14 表示 14% 这种写法。
|
||||||
|
- 风险:显示/描述与实际生效严重偏差(例如显示 +14%,实际可能只加 0.14 或反过来直接回满)。
|
||||||
|
|
||||||
|
10. [问题] TDLevelOptions 强化池当前未接入实际流程
|
||||||
|
|
||||||
|
- 位置:assets/script/game/common/config/TDLevelOptions.ts
|
||||||
|
- 现状:getNormalBuffs/getTalentBuffs 在代码中未被引用,属于孤岛配置。
|
||||||
|
|
||||||
|
11. [问题] 强化池常规等级选项集合恒定
|
||||||
|
|
||||||
|
- 位置:assets/script/game/common/config/TDLevelOptions.ts
|
||||||
|
- 现状:多数等级池子只有 4 条且默认抽 4 个,实际仅随机排序,没有“随机性”。
|
||||||
|
|
||||||
|
12. [问题] 上限规则仅写在 note 文本,未强制 clamp
|
||||||
|
|
||||||
|
- 位置:assets/script/game/hero/HeroAttrsComp.ts + assets/script/game/common/config/TDLevelOptions.ts
|
||||||
|
- 现状:clamp 只限制 CRITICAL/DODGE/HIT;STUN_CHANCE/FREEZE_CHANCE/LIFESTEAL 等未做强制上限。
|
||||||
|
|
||||||
|
13. [严重问题] 攻速/技速对 CD 不生效
|
||||||
|
|
||||||
|
- 位置:assets/script/game/hero/HeroSkills.ts
|
||||||
|
- 现状:resetCD 里按 AS/SS 计算了 cd,但随后又把 cd 覆盖回 cd_max。
|
||||||
|
- 风险:攻速/技速体系失效,强化与天赋相关数值无法体现。
|
||||||
|
|
||||||
|
14. [严重问题] 计数型天赋 key 与属性枚举不一致,导致天赋效果读取失败
|
||||||
|
|
||||||
|
- 位置:assets/script/game/hero/TalComp.ts + assets/script/game/hero/HeroAtkSystem.ts
|
||||||
|
- 现状:TalComp 写入使用 TalEffet.DMG_RED(等),HeroAtkSystem 读取却用 Attrs.DMG_RED/Attrs.THORNS。
|
||||||
|
- 风险:减伤/反伤等计数型天赋永远不生效或表现异常。
|
||||||
|
|
||||||
|
15. [问题] 多处存在 “|| 0 + xxx” 的运算优先级坑
|
||||||
|
|
||||||
|
- 位置:assets/script/game/hero/HeroAtkSystem.ts
|
||||||
|
- 现状:会在属性非 0 时吞掉天赋增量(或相反),导致数值叠加不符合预期。
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user