00-写在最前面的
851 字
4 分钟
00-写在最前面的
UE GAS 框架剖析及 Unity 网络化复刻
这是我打算开的的一个新坑,一套从问题出发的连续教程。从一个逐步变复杂的火球术观察技能脚本为什么会失控出发,再拆解 Unreal Engine Gameplay Ability System(GAS)的模型,最后把这些语义映射成一套 Unity 方案。
定位
本文不以“把 UE 的类名搬到 Unity”为目标,也不试图实现一个完整的 GAS 替代品。真正要解决的是多人战斗中反复出现的边界问题:
- 谁拥有 Mana、Health 和冷却等状态;
- 谁决定一次技能是否成功、是否命中;
- 一次性伤害、持续 Buff、周期结算和标签如何拥有明确生命周期;
- 技能等待动画、目标确认或命中事件时如何取消;
- 客户端已经播放表现而服务器拒绝时,如何校正;
- 如何在不启动 Unity 场景的情况下测试战斗规则。
阅读时应始终先问“这段逻辑解决哪类问题、状态归谁、在哪一端运行”,再去看它在某个引擎里的类名。
前置知识
建议先具备:
- C# 基础,以及 Unity
MonoBehaviour、ScriptableObject和生命周期概念; - 客户端、服务器、RPC、状态同步和延迟的基本认识;
- 熟悉 Health、Mana、Buff、Debuff、冷却和技能打断;
- 能读懂简化的 C# 与时序图代码。
火球术统一示例
| 项目 | 统一参数 |
|---|---|
| Mana Cost | 30 |
| Cooldown | 2 秒 |
| 直接伤害 | 120 |
| Burning | 持续 5 秒,每 1 秒结算一次 |
部分章节只会使用其中一部分参数,但不会改写这些约定。Burning 的每次伤害数值如果没有特别声明,只讨论它的生命周期和结算节奏,不补充一个新的伤害数值。
章节导航
基础模型
- 01-从技能脚本到能力系统
- 02-GAS的核心模型
- 03-GAS核心对象与职责边界
Unity 方案
- 04-一次Ability的完整执行链
- 05-Unity复刻的整体架构.md
- 06-Tag-Attribute与Effect实现
- 07-Ability生命周期与异步任务
网络、案例与工程化
- 08-Server-Authority与网络协议
- 09-客户端预测与服务器校正
- 10-火球术完整案例
- 11-测试-错误处理与工程取舍
概念标记规则
为了避免把 UE、Unity 和通用设计混在一起,正文使用以下标记:
- 在 UE GAS 中:描述 Unreal Engine 官方 GAS 语义或对象职责。这里的
AbilitySystemComponent、GameplayAbility、GameplayEffect等是 UE 术语。 - 在本文的 Unity 方案中:描述本文提出的 Unity 侧架构。
AbilityDefinition、AbilitySpec、AbilityRuntime、AttributeStore、PredictionJournal等都是本文自定义类型,不是 Unity 内置 API。 - 通用原则:不依赖具体引擎或网络库的设计判断,例如“最终伤害由权威端决定”“持续状态需要明确到期和清理责任”。
- 示例代码:用于说明数据流或边界的简化代码,不代表可以直接复制进项目。代码中的省略号、伪接口和未展示的序列化细节都需要项目自行补齐。
如果一个代码片段同时出现 Unity 内置类型和本文自定义类型,会在片段前明确说明。例如 ScriptableObject 是 Unity 类型,而 AbilityDefinition 是本文定义的资产类型;MonoBehaviour 反例只用于展示职责耦合,不代表推荐的最终实现。
相关文章 智能推荐
1
05-Unity复刻的整体架构
游戏开发 2026-08-28
2
02-GAS的核心模型
游戏开发 2026-07-25
3
04-一次Ability的完整执行链
游戏开发 2026-08-08
4
03-GAS核心对象与职责边界
游戏开发 2026-08-04
5
01-从技能脚本到能力系统
游戏开发 2026-07-24
随机文章 随机推荐