Aesir Architecture 示例总览¶
包内含 11 个可导入示例(Package Manager → Aesir Architecture → Samples 标签页按需导入)。所有示例:
- 位于包内
Samples/目录(仓库浏览时直接可见、场景可直接打开运行) - 程序集为运行时程序集 + 整文件
#if UNITY_EDITOR:编辑器内可编译、可挂载、可 Play;玩家构建整体剔除,示例类型 0 入包 - 命名空间
Runestone.AesirArchitecture.Samples.<示例名>
0.24.0 起:菜单
Tools → Aesir → Getting Started打开示例导航窗口——集中浏览两包全部示例,点击卡片定位示例文件夹,带场景的示例经「打开场景」按钮直达,无需手动翻找目录。UPM / 嵌入式安装的未导入示例,点击卡片以 Toast 引导,经「导入 Sample」按钮确认后直接导入到Assets/Samples/(确认框含示例介绍与导入位置,可取消)。
计数器六档(MVC / MVP 各三课)¶
同一个"计数器界面"用六种写法实现,逐课同构对照 —— 这是学习框架的主线教程。每档只有一个核心增量:
| 档位 | 示例 | Model 暴露面 | 读写路径 | View 边界 |
|---|---|---|---|---|
| MVC 第一课 | Counter-Mvc-Quick |
具体类,可写 ObservableValue |
View 兼 Controller 直写直读 | MonoViewController<T> 单类 |
| MVC 第二课 | Counter-Mvc-Standard |
具体类,只读暴露 + 写方法 | Controller 直调写方法 | View 与 Controller 分离,共享 Model |
| MVC 第三课 | Counter-Mvc-Strict |
接口注册,只读暴露 + 写方法 | Command 写 + Query 加工读 | View 按业务窄接口持有 Controller |
| MVP 第一课 | Counter-Mvp-Quick |
具体类,可写 ObservableValue |
Presenter 直改值并推送 | 纯 MonoBehaviour,零接口抽象 |
| MVP 第二课 | Counter-Mvp-Standard |
具体类,只读暴露 + 写方法 | Presenter 直调写方法 | View 契约 IXxxView |
| MVP 第三课 | Counter-Mvp-Strict |
接口注册,只读暴露 + 写方法 | Command 写 + Query 读 | View 按窄接口持有 Presenter |
各档要点:
最少概念跑通数据驱动 UI 闭环。MVC 用 MonoViewController<T> 一个类兼 View 与 Controller;MVP 零接口抽象,Presenter 直改可写 ObservableValue 并推送被动 View。适合原型与教学起步。
推荐起步档位。Model 只读暴露 + 写方法封装修改入口;MVC 中 View 与 Controller 分离共享 Model;MVP 中 View 实现 IXxxView 契约,Presenter 直调写方法 + 读 Model 推送。
读写全解耦:Model 接口注册 + Command 写 + Query 读;View 按业务窄接口持有 Controller / Presenter —— 类型层面拿不到 ExecuteCommand / GetModel 等框架能力,读写分离由类型系统闭环。MVC 与 MVP 严格档结构完全对称。
学习路径建议
按 Quick → Standard → Strict 顺序对照源码阅读(MVC 与 MVP 各一遍),重点看每档"多出来的那一个概念"。六份示例的场景、UI、表现完全一致,差异只在架构分层。
工具类示例¶
MiniEvent¶
MiniEvent 与 MiniEvent<T> 用法演示:无参 / 单参事件的订阅、触发与自动退订(多参数载荷建议用 struct 包裹成单参事件)。
ObservableValue(需 Odin Inspector)¶
ObservableValue<T> 自定义 Drawer 演示:int / float / string / bool / Vector2 基础类型与 struct / class 复合类型在 Inspector 中的编辑与通知。
ObservableCollections¶
ObservableList<T> / ObservableDictionary<TKey, TValue> / ObservableHashSet<T> 变更通知用法:单轨订阅 AddListener(按 Action 分流 Add / Remove / Replace / Move / Reset),经 ContextMenu 触发增删改查与集合运算。
PlaneWar 实战(Mono 版)¶
纵版射击飞机大战完整小游戏 —— 框架机制的组合实战:
- 得分 HUD(
ObservableValue驱动)、三型敌机、子弹命中计分(A=10 / B=20 / C=30)、坠毁重开流程 - 组合运用
MiniEvent+ObservableValue+MonoLifecycleProxy - 素材自包含:精灵来自 Vertical 2D Shooting BE4(Copyright ⓒ 2021 Goldmetal;标注 Goldmetal 出处即可自由使用,含商用),示例内为自包含拷贝
RuntimeInitializeLoadType(初始化时机)¶
编辑器窗口演示 RuntimeInitializeLoadType 五个初始化时机的执行顺序与静态重置最佳实践。菜单 Tools → Aesir → Architecture → Samples → RuntimeInitializeLoadType。
Note
此示例为编辑器工具(Editor-only 程序集,程序集带 ODIN_INSPECTOR 定义约束),已在 package.json Samples 登记,UPM 安装可经 Samples 标签页导入;本仓库可直接浏览 Samples/RuntimeInitializeLoadType/。