返回系统工坊
已完成战斗Buff

Buff 状态效果框架

案例研究 / system-design

战斗Buff状态效果生命周期

我把 Buff 从效果列表拆成状态效果基础设施,用配置、实例、生命周期、叠加触发、效果接口和事件反馈支撑可扩展、可追踪、可迁移的战斗状态。

项目阶段

原型

负责人

苏阿酥

协作团队

多人协作

Buff 状态效果框架 系统封面

摘要

我把 Buff 从效果列表拆成状态效果基础设施,用配置、实例、生命周期、叠加触发、效果接口和事件反馈支撑可扩展、可追踪、可迁移的战斗状态。

系统定位

状态效果基础设施,负责把 Buff / Debuff 从单次技能逻辑升级为可复用生命周期。

项目类型

Unity 2D 横版动作战斗样机,用公开结构展示配置、触发、叠加和验证口径。

关键实现

BuffData、BuffInstance、BuffManager、IBuffEffect、触发分发和旧系统桥接。

设计问题

效果混进主逻辑

伤害、治疗、控制和属性变化如果直接写进角色或技能脚本,状态叠加、移除和复用会快速失控。

生命周期难定位

持续时间、Tick、刷新、叠层、过期和移除没有统一入口时,测试很难判断问题出在配置、实例还是效果执行。

叠加依据会误判

如果用 buffID 判断同类效果,不同来源的同一 Poison 或 Freeze 可能绕过刷新、延长或覆盖规则。

反馈和迁移断层

UI、血条、特效和旧 EnemyBuffManager 若缺少事件与桥接层,重构会同时打断表现和旧内容。

设计目标

提升配置表达

≥ 可配置

BuffData 能说明分类、极性、表现、持续时间、Tick、数值和叠加规则。

提升实例追踪

≥ 可追踪

BuffInstance 能记录剩余时间、Tick、层数、来源、目标和激活状态。

提升效果扩展

≥ 可扩展

DoT、HoT、Freeze、Slow 等效果通过 IBuffEffect 接入,不改生命周期主流程。

提升迁移安全

≥ 可兼容

旧 BuffType、BuffInfo、EnemyBuffManager 和 DisplayConfig 能通过桥接逐步迁移。

我的方案

阶段一·定义
01

BuffData 收束配置

用 BuffData 承载 buffID、分类、极性、图标、颜色、持续时间、Tick、数值和叠加规则,让状态效果先成为可配置的静态规则。

02

实例隔离状态

用 BuffInstance 保存实例、来源、剩余时间、Tick 和层数,让多目标共享 BuffData 时不串运行时状态。

03

生命周期主干

由 BuffManager 统一添加、刷新、叠层、Tick、过期、移除、查询和事件广播,让状态流转可追踪。

阶段二·执行
04

叠加规则分支

同类效果先按 BuffEffect 匹配,再进入刷新、延时、数值叠层、独立实例或覆盖替换等规则。

05

统一触发分发

Manual、OnHit、OnAttack、Passive、OnSkillStart、OnSkillEnd 统一进入触发判断,由 Ability 或事件层决定目标。

阶段三·验证
06

效果接口承接

DoT、HoT、Freeze、Slow 实现 IBuffEffect,由 BuffEffectExecutor 调度,避免生命周期主干塞满具体效果。

07

事件反馈与迁移桥接

用 OnBuffAdded、Refreshed、Stacked、Removed 事件驱动 UI 和调试显示,并保留 LegacyBuffMapper 让旧系统平滑迁移。

策略要点

01

先拆配置与实例

先把静态规则和运行时状态分离,再处理具体效果,避免多个目标、多个来源或存档恢复时互相污染。

02

用效果判同类

以 BuffEffect 判断叠加而不是 buffID,避免同一中毒、冰冻或回复因来源不同绕过刷新、延长和覆盖规则。

03

先桥接再替换

保留旧 EnemyBuffManager、BuffInfo 和 DisplayConfig 的兼容路径,再逐步迁移,降低重构一次性打断表现和旧内容的风险。

关键产出

BuffData 字段口径

形成静态配置字段说明,用于证明标识、分类、极性、表现、持续时间、Tick、数值和叠加规则已经统一。

运行时模型说明

形成 BuffInstance 状态模型,用于证明剩余时间、Tick、层数、来源和实例状态不会污染静态配置。

生命周期链路图

形成添加、刷新、叠层、Tick、过期、移除和事件广播的链路说明,用于证明状态流转可定位。

叠加触发规则表

形成六类叠加规则和六类触发方式的矩阵,用于证明同类匹配、施加时机和目标分发有明确口径。

验收与迁移清单

形成 Poison、HealOverTime、Freeze、Ability 触发和旧系统桥接的验收清单,用于证明框架已被验证和沉淀。

数据反馈

结构层级

5层

配置 / 实例 / 管理器 / 执行器 / 效果接口。

叠加规则

6类

NoStack、Refresh、Duration、Value、Independent、Override。

触发方式

6类

Manual、OnHit、OnAttack、Passive、OnSkillStart、OnSkillEnd。

验证样例

3类

Poison、HealOverTime、Freeze 覆盖伤害、治疗和控制。

复盘

状态效果不是 Poison、Freeze、Slow 的效果列表,而是添加、刷新、Tick、叠加、过期和移除的可追踪规则。

只有把配置、实例、生命周期和具体效果拆开,新状态才不会持续污染角色逻辑、技能脚本和 UI 表现。

旧系统不是一次性删除对象;桥接、fallback 和阶段迁移能让重构过程仍然可调试、可回退、可验收。