RPG游戏的战斗系统底层框架
核心功能体系
1. 条件监听系统(Condition System)—— 已完整实现
这是一个高灵活度的“事件触发器”框架,支持游戏内所有“当XX发生时,触发YY效果”的逻辑场景。
支持类型: FloatCondition(数值比较)、BoolCondition(状态判断)
支持比较符: 大于、小于、等于、不等于、不大于、不小于(Float);存在、不存在(Bool)
三种监听模式:
Instance(单次判断):瞬时判定,不监听变化,适用于技能施放条件检查。
Static(单目标监听):绑定固定阈值,目标数值变化时自动触发。
Dynamic(多目标监听):阈值由其他实体数值动态决定,支持跨Entity比较。
业务应用举例:
生命值低于30%时自动触发护盾(Static)
自身法力值高于目标法力值时,伤害提升10%(Dynamic)
检查技能施放时是否处于“无法施法”状态(Instance)
2. 数值属性系统(Attribute System)—— 已完整实现
支持float/bool等基础数值类型的存取与变更通知
通过IResolve.GetFloat/GetBool接口统一取值,支持当前值、最大值、百分比、损失值等多种ValueMode
数值变更时自动向Monitor系统派发事件,与Condition系统无缝联动
3. 调试追踪系统(Tracer)—— 已完整实现
统一日志管理,内置IsDebugMode开关
生产环境关闭日志,零性能开销;开发环境开启,打印Condition判断链路全流程
监听器分桶 + 二分查找(性能优化)
Monitor根据RunTimeIndex和ValueMode对条件进行分桶排序
数值变更时通过二分查找定位命中条件,时间复杂度 O(log n),避免全局遍历
特别针对等于/不等于比较符优化Key排序,存储空间更密集
Branch与Condition双层解耦(高扩展性)
Condition只负责“两个值比较输出bool”
Branch独立管理TargetList(多目标监听列表)和阈值拥有者
目标、衡量标准、事件发起者三方解耦,Dynamic模式下可任意指定跨Entity判断
反向索引与自动注销(防内存泄漏)
每个Branch注册时分配唯一定位符BranchLocation(EntityID/TreeID/NodeID/BranchID)
销毁时自动从Monitor桶中移除,不需要手动维护监听列表,彻底杜绝回调泄漏
逻辑树驱动(ConditionTree)
叶节点支持 AND / OR / NOT 逻辑组合
任一Branch值变化时,逐级向上刷新Bool值,仅在根节点反转时对外发布事件,减少无效事件广播
技能系统架构设计
原子Component
技能由主Component + 多个副Component组合而成,类型由主Component决定
支持“策划配表即用”,新增效果无需改底层,只需添加新Component组合
结算流水线全链路设计:施法准备 → 施放阶段 → 目标选择 → 构建Intent → 计算增益 → 命中判断 → 技能结算 → 后处理(仅作为展示,非实际流水线设计)