跳转至

AesirFramework

面向 Unity / 团结引擎的渐进式 MVC 架构与功能模块。

从一个简单的 MonoBehaviour 开始,按项目复杂度逐步引入 Context、Model、Service、Command / Query 与 View。AesirFramework 不替你重建 Unity,而是把 Unity 原生能力组织成清晰、可测试、可扩展的工作流。

Unity / 团结引擎 2022.3+ Architecture + Modules 0.31.1 MIT License

安装

推荐在 Package Manager 中使用常驻 latest 分支——分支名永久固定,Git URL 一次输入持续更新(升级 = 移除后用同一 URL 重新添加)。打开 Package Manager → + → Add package from git URL...,添加你需要的包:

https://github.com/yuumixcode/AesirFramework.git#AesirArchitecture-latest

Modules 依赖 Architecture。安装 Modules 时请同时添加两个包:

https://github.com/yuumixcode/AesirFramework.git#AesirArchitecture-latest
https://github.com/yuumixcode/AesirFramework.git#AesirModules-latest

从 GitHub Releases 下载对应版本的 .unitypackage。如果需要完整组合包,可选择 AesirFramework-v<版本>.unitypackage。

unitypackage 安装到 Assets/Runestone/ 后,可以使用 Tools → Aesir → Check for Updates 检测并更新;Git URL 安装请直接通过 Package Manager 管理。

兼容性

项目 支持范围
Unity / 团结引擎 2022.3+(开发与验证环境:2022.3.62f3c1)
渲染管线 架构层与管线无关;Modules 使用 uGUI
Odin Inspector 可选;仅提供 Inspector / Binder 等增强能力
Addressables / Input System 可选;安装后自动启用对应集成
许可证 MIT

双包组成

AesirFramework 由两个同号发布的包组成。先用 Aesir Architecture 建立项目核心逻辑;需要 UI、场景或事件能力时,再添加 Aesir Modules。两个包可以独立理解,也可以组合使用。

CORE ARCHITECTURE

Aesir Architecture

渐进式 MVC / MVP 架构核心。以纯 C# 架构根连接 Unity 的 PlayerLoop、ScriptableObject 与 Editor API,让 Model、Service、Command / Query 和 View 保持清晰边界。

  • 三档渐进路径:快捷 → 标准 → 严格
  • ObservableValue、MiniEvent 与生命周期能力
  • 11 个可导入示例,包含 6 个计数器对照和 PlaneWar

快速开始 特性一览

OPTIONAL MODULES

Aesir Modules

建立在 Architecture 之上的功能模块集合:UI 框架、事件模块、音频模块、场景模块与脚本文档生成工具(需 Odin)。

  • UI:四层 Canvas、面板生命周期与 Binder
  • Events:双轨订阅事件系统(过滤器、SO 资产化)
  • Audio:SFX 轮询、BGM 淡入淡出与音量持久化
  • Scene:场景加载、卸载与 SceneAssetWrapper
  • 可选集成:Odin Inspector、Addressables、Input System

快速开始 特性一览

代码一瞥

最小 MVC 闭环(快捷档):Context 注册 Model,面板订阅 ObservableValue 完成数据驱动 UI —— 不建 Command、不建独立 Controller。

// 1. Context:注册 Model(快捷档按具体类注册,不做接口抽象)
public sealed class CounterContext : AbstractContext<CounterContext>
{
    protected override void Configure() => RegisterModel(new CounterModel());
}

// 2. Model:可写 ObservableValue 直接暴露
public sealed class CounterModel : AbstractModel
{
    [SerializeField] public ObservableValue<int> count = new ObservableValue<int>(0);
}

// 3. 面板(View 兼 Controller):订阅刷新 + 按钮直改
public class CounterPanel : MonoViewController<CounterContext>
{
    [SerializeField] Text countText;
    [SerializeField] Button increaseButton;

    void Start()
    {
        var model = this.GetModel<CounterModel>();
        model.count.AddListenerAndInvoke(UpdateText)
             .RemoveListenerWhenGameObjectOnDestroyed(gameObject);
        increaseButton.onClick.AddListener(() => model.count.Value++);
    }

    void UpdateText(int count) => countText.text = count.ToString();
}

项目长大后,再按 三档渐进路径 逐步引入接口注册、只读暴露与 Command / Query —— 每档只加一个概念,不是推翻重写。完整可运行版本见 Counter 六档对照示例。

为什么选择 Aesir

01 · 渐进式

不要求新项目一次性接受完整框架。先写能运行的代码,再按复杂度引入接口组合、Context 和严格分层。

02 · Unity 原生优先

深度使用 PlayerLoop、序列化与编辑器能力,不搭建与引擎平行的运行时;静态状态显式重置,反复进出 Play Mode 无残留。

03 · 依赖边界清楚

核心架构零第三方依赖;Odin、Addressables、Input System 经独立程序集与条件编译接入,未安装可选依赖不影响基础流程。

04 · 工程化交付

800+ EditMode 单元测试随包验证;CI 自动维护常驻 latest 分支与 unitypackage 发布;示例构建期自动剔除,不占包体。

从这里开始

文档与支持

完整 API 说明、类型矩阵和实现约定分布在两组文档中:

发现问题时,请附上 Unity / 团结引擎版本、AesirFramework 版本和最小复现步骤,前往 GitHub Issues 反馈。