Apollo 技术文档Apollo 技术文档
指南
  • 架构概述
  • BigWorld 架构深度解析
  • BigWorld 进程架构与玩家生命周期
  • AOI九宫格系统详解
  • AOI广播与消息去重
  • Base 模块
  • Core 模块
  • Runtime 模块
  • Data 模块
  • Network 模块
  • /modules/actor.html
  • Game 模块
  • BigWorld 模块
服务器应用
API 参考
QA
GitHub
指南
  • 架构概述
  • BigWorld 架构深度解析
  • BigWorld 进程架构与玩家生命周期
  • AOI九宫格系统详解
  • AOI广播与消息去重
  • Base 模块
  • Core 模块
  • Runtime 模块
  • Data 模块
  • Network 模块
  • /modules/actor.html
  • Game 模块
  • BigWorld 模块
服务器应用
API 参考
QA
GitHub
  • MMORPG 架构 QA

Q41: 如何设计技能系统?

核心结论

技能系统的核心不是“一个技能配多少字段”,而是把技能从硬编码动作变成可配置、可校验、可组合的一套执行流程。

真正需要先设计清楚的是:

  • 技能的输入和目标选择
  • 释放条件和冷却
  • 技能阶段和打断规则
  • 技能效果如何落到战斗系统和 Buff 系统

如果这些边界不清晰,技能越多,系统越快失控。

一、技能系统本质上是什么

技能系统可以理解成“战斗行为模板加执行状态机”。

一条技能通常至少包含:

  • 谁释放
  • 对谁释放
  • 在什么条件下释放
  • 分几段执行
  • 产生哪些效果

它不是单次函数调用,而是一次可追踪的行为流程。

二、先区分技能定义和技能实例

1. 技能定义

技能定义是静态配置,例如:

  • 技能类型
  • 冷却
  • 消耗
  • 射程
  • 目标规则
  • 效果列表

2. 技能实例

技能实例是运行时状态,例如:

  • 当前施法阶段
  • 已锁定目标
  • 是否被打断
  • 剩余引导时间

这两层不分开,后面很难支持引导、多段和复杂状态。

三、技能执行通常会经历哪些阶段

常见可以拆成:

  1. 发起请求
  2. 前置校验
  3. 进入前摇或吟唱
  4. 结算命中与效果
  5. 后摇、结束或进入冷却

如果是引导技能、蓄力技能或多段技能,中间还会有持续阶段。

四、技能系统为什么一定要和战斗系统解耦

技能系统负责“怎么发起和组织一次技能行为”,战斗系统负责“效果如何真正结算”。

例如:

  • 技能系统决定这是一次扇形攻击
  • 战斗系统决定每个目标最终受到多少伤害

如果所有伤害、状态、仇恨逻辑都塞进技能模块,复用和调试都会很差。

五、数据驱动是重点,但不是把逻辑全丢给配置

技能系统确实应该数据驱动,但边界要清楚。

适合配置的通常包括:

  • 条件
  • 阶段
  • 效果列表
  • 参数

不适合无限放进配置的通常包括:

  • 极其复杂的条件脚本
  • 过多跨系统副作用
  • 隐式触发链

否则配置会变成另一种难维护的代码。

六、目标选择和释放条件往往比效果更关键

技能设计里经常最容易出问题的不是伤害数值,而是:

  • 锁定谁
  • 多目标如何筛选
  • 释放距离与朝向如何判定
  • 无目标技能如何落点

这些决定了技能是否可预期、可验证、可同步。

七、要提前支持打断、免疫和冲突规则

技能越多,越需要一套统一规则处理:

  • 能不能在骑乘时放
  • 能不能边移动边放
  • 施法中能否被沉默或击退打断
  • 同类技能共享冷却还是独立冷却

这些规则如果零散写在各技能里,维护成本会非常高。

八、工程上更稳妥的组织方式

常见做法是:

  • 技能配置定义静态规则
  • 运行时用技能实例管理状态
  • 战斗结算由独立模块处理
  • Buff、召唤、位移等效果作为标准化效果节点执行

这样技能只负责组织流程,不承担所有业务细节。

九、常见误区

1. 技能系统就是一堆技能表

不够。没有执行状态机和统一效果模型,配置表很快就会失控。

2. 每个技能写独立脚本最灵活

短期灵活,长期重复很多,而且很难统一处理冷却、打断、触发链。

3. 客户端能播出来就算技能成功

不对。表现可以提前播,最终合法性和命中必须由权威逻辑裁定。

参考资料

  • 各类 MMO / ARPG 技能系统与效果编排实践资料
在 GitHub 上编辑此页
最后更新: 3/20/26, 6:06 AM
贡献者: cuihairu