00-写在最前面的

851 字
4 分钟
00-写在最前面的

UE GAS 框架剖析及 Unity 网络化复刻#

这是我打算开的的一个新坑,一套从问题出发的连续教程。从一个逐步变复杂的火球术观察技能脚本为什么会失控出发,再拆解 Unreal Engine Gameplay Ability System(GAS)的模型,最后把这些语义映射成一套 Unity 方案。

定位#

本文不以“把 UE 的类名搬到 Unity”为目标,也不试图实现一个完整的 GAS 替代品。真正要解决的是多人战斗中反复出现的边界问题:

  • 谁拥有 Mana、Health 和冷却等状态;
  • 谁决定一次技能是否成功、是否命中;
  • 一次性伤害、持续 Buff、周期结算和标签如何拥有明确生命周期;
  • 技能等待动画、目标确认或命中事件时如何取消;
  • 客户端已经播放表现而服务器拒绝时,如何校正;
  • 如何在不启动 Unity 场景的情况下测试战斗规则。

阅读时应始终先问“这段逻辑解决哪类问题、状态归谁、在哪一端运行”,再去看它在某个引擎里的类名。

前置知识#

建议先具备:

  1. C# 基础,以及 Unity MonoBehaviourScriptableObject 和生命周期概念;
  2. 客户端、服务器、RPC、状态同步和延迟的基本认识;
  3. 熟悉 Health、Mana、Buff、Debuff、冷却和技能打断;
  4. 能读懂简化的 C# 与时序图代码。

火球术统一示例#

项目统一参数
Mana Cost30
Cooldown2 秒
直接伤害120
Burning持续 5 秒,每 1 秒结算一次

部分章节只会使用其中一部分参数,但不会改写这些约定。Burning 的每次伤害数值如果没有特别声明,只讨论它的生命周期和结算节奏,不补充一个新的伤害数值。

章节导航#

基础模型#

  1. 01-从技能脚本到能力系统
  2. 02-GAS的核心模型
  3. 03-GAS核心对象与职责边界

Unity 方案#

  1. 04-一次Ability的完整执行链
  2. 05-Unity复刻的整体架构.md
  3. 06-Tag-Attribute与Effect实现
  4. 07-Ability生命周期与异步任务

网络、案例与工程化#

  1. 08-Server-Authority与网络协议
  2. 09-客户端预测与服务器校正
  3. 10-火球术完整案例
  4. 11-测试-错误处理与工程取舍

概念标记规则#

为了避免把 UE、Unity 和通用设计混在一起,正文使用以下标记:

  • 在 UE GAS 中:描述 Unreal Engine 官方 GAS 语义或对象职责。这里的 AbilitySystemComponentGameplayAbilityGameplayEffect 等是 UE 术语。
  • 在本文的 Unity 方案中:描述本文提出的 Unity 侧架构。AbilityDefinitionAbilitySpecAbilityRuntimeAttributeStorePredictionJournal 等都是本文自定义类型,不是 Unity 内置 API。
  • 通用原则:不依赖具体引擎或网络库的设计判断,例如“最终伤害由权威端决定”“持续状态需要明确到期和清理责任”。
  • 示例代码:用于说明数据流或边界的简化代码,不代表可以直接复制进项目。代码中的省略号、伪接口和未展示的序列化细节都需要项目自行补齐。

如果一个代码片段同时出现 Unity 内置类型和本文自定义类型,会在片段前明确说明。例如 ScriptableObject 是 Unity 类型,而 AbilityDefinition 是本文定义的资产类型;MonoBehaviour 反例只用于展示职责耦合,不代表推荐的最终实现。

00-写在最前面的
https://blog.rouming-fei.top/posts/00-before-all/
作者
废江流
发布于
2026-07-23
许可协议
CC BY-NC-SA 4.0

评论区

Profile Image of the Author
废江流
提灯寻影,灯到影灭。
分类
标签
站点统计
文章
15
分类
4
标签
18
总字数
37,248
运行时长
0
最后活动
0 天前

文章目录