更新日志¶
本页为站点摘要视图。完整历史(含 0.14.0 之前版本与各子包独立变更)见主仓库:
- 根 CHANGELOG.md(monorepo 聚合视图)
- GitHub Releases(unitypackage 下载)
格式基于 Keep a Changelog,版本号遵循语义化版本。
当前版本¶
| 子包 | 包名 | 版本 |
|---|---|---|
| Aesir Architecture | cn.runestone.aesir.architecture |
0.31.1 |
| Aesir Modules | cn.runestone.aesir.modules |
0.31.1 |
版本策略
两包同号发版(CI 校验一致),推荐同版本安装。Aesir Modules 依赖 Aesir Architecture;Aesir Architecture 不依赖任何 Aesir 子包。
[0.31.1] - 2026-09-29¶
文档补丁版本:两包源码与 0.31.0 一致,无功能变更;本轮全部内容落在本站与仓库记忆:
- Scripting API 页全量重生成至 0.31.0 口径(RAA 131 页 / RAM 153 页,9 个程序集 284 类型):新增
IView<T>、AesirPlayerLoop家族、AudioChannel、SceneModuleUniTask、NiceTypeName、SceneModuleSettingsWindowOdin等页,移除Internal/ListExtensions、Editor/SceneManagerWindow - 修复侧栏 API 导航缺陷:导航路径前缀重复(
architecture/scripting-api/architecture/scripting-api/…)导致全部 API 链接 404;修复后 284 条导航目标全部有效且与页面一一对应 - 内容页对齐 0.31.0 共 27 处:示例总数 9/10 → 11 与
RuntimeInitializeLoadType登记状态、已删RegisterCustomLifecycle用法示例、AesirPlayerLoop按帧节流自愈口径、双注册表收 internal、Binder 编辑器工具链不随 Player 打包、包不再声明测试框架依赖,以及IView<T>/GetAllEntries/ClearListeners接口面 /EventModuleDDOL / Binder 设置持久化 /Channels等新能力补录 - 补第三方素材出处:PlaneWar 示例使用的 Vertical 2D Shooting BE4(Goldmetal)补上版权与授权口径,与包内 Third Party Notices 对齐
[0.31.0] - 2026-09-29¶
仓库级变更:三轮审查修复全量落地(复核 / 终审 / 修复优化方案),覆盖初始化语义、程序集边界、静态重置、日志规范、持久化与分发裁剪等 100 余项,含多处破坏性 API 变更(见下)。分发侧 auto-publish-branches.yml 在 subtree split 后剔除开发侧 Samples/ 与 Documentation/——UPM 产物只保留 ~ 镜像,消费工程不再无条件多出样例程序集,也不会与 Package Manager 导入的样例撞 GUID;开发仓库接入 UniTask(com.cysharp.unitask,UPM Git URL)用于双态验证。
Aesir Architecture¶
-
Added
IView<T>泛型表现层接口(默认接口实现绑定AbstractContext<T>.Instance单例,对齐IController<T>/IPresenter<T>):View 适配对(AesirView / MonoView)与 VC 适配对(AesirViewController / MonoViewController)改经 DIM 绑定并删除手写显式实现,VC 实例额外获得IController<T>可赋值性;IGenericLocator<T>新增GetAllEntries()诊断成员并继承IDisposable。
-
Changed
-
AesirArchitecturePlayerLoop→AesirPlayerLoop、AesirArchitectureLifecyclePhase→AesirLifecyclePhase(破坏性改名) —— 该类型是跨包共用的框架级帧钩子工件(RAA 对外公共 API,RAM 侧零引用、无对照角色),按命名规范"跨包共用 → 直接Aesir+ 语义名、不带包名段"精简;宿主AesirArchitecture与门面AesirArchitectureDebug与 RAM 的AesirModules/AesirModulesDebug成对,保留全名。迁移:调用点改AesirPlayerLoop.Register(AesirLifecyclePhase.BeforeUpdate, …)。 -
初始化语义修正(破坏性修复) ——
Initialize()曾在调用Configure()之前就置位内部标志,使Configure()里注册的每个模块当场初始化一次、遍历时再初始化一次(订阅重复注册、计数/加载类副作用翻倍),且"先全部 Model 后全部 Service"的两阶段顺序被打乱。现改为「集体初始化未完成时注册只登记、完成后注册立即初始化」,遍历期间注册的模块由"重复取快照直到没有未初始化模块"同轮补齐。 -
AbstractContext<T>.Dispose()由virtual收为非虚(破坏性) —— 类上同时存在两个析构扩展点,子类覆写Dispose()漏调base会留下"单例缓存不清 +Initialized残留"的僵尸上下文;定制点统一为OnDispose(),收尾段(置Initialized = false+ 摘单例缓存)移入finally保证不变量。 -
AbstractContext 容器字段改声明为
IGenericLocator<T>接口类型(DIP 落地);GetAll()改为调用时刻快照——枚举期间注册/注销不再抛「集合已修改」异常。ClearListeners()补进IObservableCollection<T>/IReadOnlyObservableValue<T>接口面(对象池回收时的退订入口);RemoveListenerHandleCollection收 internal。 -
更新器窗口刷新回调拆分——
AesirUpdateController构造器新增可省的"仅重绘"回调,进度 tick 与状态文本变更不再触发窗口重算列表(此前每次 tick 都走一遍列表重算)。 -
更新器服务层/编排层职责分离(SRP):确认框文案构建迁入
AesirUpdateController,UpdatePackagesAsync导入期收进度条改为回调;已知包登记统一到AesirGetStartedService.KnownPackages(补 DirName 字段,更新器与概览卡片共用,新增公开包只改一处);更新日志拉取阶段套 30 秒整轮预算(此前双包串行最坏约 64 秒不可逃生)。 -
README 中英快速开始改快捷档主线(第一课 3 个脚本跑通数据闭环,严格档移入「进阶」);三档文件数统一按脚本计;结构树补 Documentation 三项与 Getting Started 文件;
[InternalContext]首次获得文档说明;AI 编码指南 Quick 档模板改只读属性暴露写法(不再教公开可变字段)。 -
AesirScheduler自愈注释改实话(自愈仅发生在首次注册,被第三方覆盖后需手动EnsureInjected());ResetStatics 死防御分支删除(两处);三个 Odin AttributeProcessor 收窄internal sealed;MonoLifecycleProxy.GetListenerCount收 internal;AesirMonoBehaviour/AesirScriptableObject补ODIN_INSPECTOR_EDITOR_ONLY数据丢失警告。
-
-
Fixed
-
域重载重置链路无异常隔离 + 先 Dispose 后置空 ——
ResetStaticsAll的遍历无try/catch,任一回调抛异常即中断后续全部重置;AbstractContext<T>的回调Dispose()抛异常时_instance永不清空。现逐回调try/catch(记警告后继续)且先取_instance置空再Dispose。 -
更新器差集清理两处数据安全缺陷 —— ① 对"新清单为空"补守卫(远程 update-info.json 半截 JSON / 缺 files 字段时不再把整包判为残留删光,与上次清单守卫对称);② 差集前缀改按包目录名从清单反推(安装根被移动到其它文件夹时,清理此前静默失效、残留持续累积)。
-
ScriptingSymbolEditorUtilityTests改写真实宏定义符号导致 Test Runner 中途域重载 —— 每次PlayerSettings变更都会请求 "Define symbols changed" 全量脚本重编译,编译完成时本轮 EditMode 尚未结束,Test Runner 报Unexpected assembly reload happened while running tests并丢失上下文;增删语义抽为纯函数,测试改纯逻辑断言(真实写入属手动验证项)。 -
RemoveListenerOnSceneUnloadedTrigger宿主销毁时逐桶执行句柄移除(此前只清桶不 Dispose,其他场景的监听永久残留);AesirAssetPaths静态构造异常护栏(「类型中毒」降级为单次可恢复的路径降级);ObservableDictionary/ObservableHashSet补[SerializeField](失实注释修复后 Inspector 编辑初始元素真实生效);ObservableHashSet批量方法先物化源序列(传集合自身不再中断);CloneCollection.Contains真实现 + 死构造器删除 + 注释中文化;两个集合的「零分配」宣称修正为仅Invoke路径成立。
-
-
Removed
-
AesirScheduler帧粒度时间调度器整体移除(破坏性) —— 该原语自 0.21.0 引入后全仓零使用(源码引用仅存在于自身定义与专属测试,示例与 Runtime 无一处调用);需要延时请用MonoLifecycleProxy帧代理 + 计时字段,或直接把驱动方挂在 GameObject 上用协程。 -
ObservableQueue<T>(破坏性)——四集合中使用频率最低且唯一无写侧接口;内置家族收敛为三种高频集合(List / Dictionary / HashSet),队列用上游 Cysharp.ObservableCollections。 -
MonoLifecycleProxyExtensions整类(破坏性)——6 个公开扩展方法全仓零使用且均为一行转发,UnregisterCustomLifecycle的 receiver 不参与逻辑、暗示错误心智模型;更新器死入口FetchLatestReleaseSnapshotAsync与Internal/ListExtensions.cs死文件。
-
Aesir Modules¶
-
Added
-
UniTask 驱动链 PlayMode 测试程序集
Runestone.AesirModules.Tests.UniTask—— 覆盖SceneModuleUniTask全部 8 个公开 API(含入口即取消、加载中取消、宿主销毁不悬挂、进度归一化),defineConstraints双守卫,未装 UniTask 的工程整体不编译。 -
日志门面补
ScriptDocGeneratorTag;测试守护网新增三处(UIRoot.CreateInputModule/AesirEventUtility.KeyCache静态重置、重复实例只销毁自身组件——该行为在 EditMode 下不可断言,落在 PlayMode 程序集)。
-
-
Changed
-
测试程序集按「是否依赖 Odin 类型」重新划分 —— 原先编辑器测试程序集带
ODIN_INSPECTOR门控,未装 Odin(或活动平台非 Editor)时整程序集静默不编译、Tests/Editor/UI/的 44 个用例在 Test Runner 中消失且零报错;现分两层:真正依赖 Odin 类型的用例(Binder 4 文件 + ScriptDocGenerator 全模块)迁入门控程序集Runestone.AesirModules.Tests.Editor.OdinInspector,其余留在基线程序集(保留Sirenix.*.dll预编译引用但移除门控——指向不存在程序集的预编译引用会被 Unity 静默忽略)。 -
Binder 编辑器工具链移出 Player 构建 + ScriptDocGenerator 运行时代码解除对 Odin 运行时程序集的依赖 —— 3,400+ 行编辑器工具链(BinderAssistant 全程序集扫描、代码生成器、写脚本)不再随 Standalone 打包(纯文本逻辑 + 整文件
#if UNITY_EDITOR两道防线);ScriptDocGenerator 新增NiceTypeName承接类型格式化(逐条移植 Sirenix 规则,27/27 输出一致)。 -
日志输出统一收敛到包门面
AesirModulesDebug(日志文案变更) —— 生产路径此前有 50 余处绕开门面的裸Debug.Log*(含无前缀者),覆盖面含事件模块绑定失败告警、ScriptDocGenerator 全模块与BootstrapSceneHelper;[ScriptDocGeneratorAPI]前缀改用门面 source 次前缀保留。代价是控制台文本前缀形态改变(彩色加粗主前缀 + 中括号次前缀),文本子串不变。唯一有意例外是AesirDependencyInstaller(其所在程序集必须零引用,补齐依赖期间门面不可用),已在类 remarks 写明。 -
EventModule双注册表AttributeBindings/DynamicBindings收窄为 internal(破坏性) —— 二者是实现细节,订阅/退订必须经公开 API 走同一套绑定键与死引用清理;业务代码若直接读过会编译失败。 -
BinderEditorSettings改为真持久化(行为变更) —— 此前类上没有[FilePath]、自身Save()只做SetDirty+SaveAssets(对非资产对象无效),值"进程内活、单例重建即回默认";现补[FilePath("ScriptableSingleton/AesirModules/BinderEditorSettings.asset", ProjectFolder)]并改调基类Save(true),重启编辑器后后缀列表 / 默认后缀 / 最近命名空间保留。 -
UIRoot重复实例改Destroy(this)(行为变更) —— 只销毁本组件,不连带销毁用户物体上的其它组件与已搭好的四层 Canvas 层级;UIRoot.CreateInputModule与AesirEventUtility绑定键缓存一并纳入域加载期静态重置。 -
AudioModule通道维度收敛为单一数据源AudioChannel(新增通道改动点由约 20 处降到约 4 处,公开成员与 PlayerPrefs 键名逐字不变);样例程序集autoReferenced归位为false(样例类型不再自动进入用户代码补全)。
-
-
Fixed
-
序列化数据层静默失效 ——
UIRoot四层 Canvas 引用表因readonly+ 缺[SerializeField]两个条件同时不满足,永远以空列表进入运行时(层子物体改名即新建重复 Canvas、同sortingOrder叠加渲染);SceneEditorSettings与RuntimeInitializeLoadTypeSettings的私有字段同样漏标——类上有[FilePath],设置文件里却没有键,值只活在当前进程内,重建单例(编辑器重启 / 切项目)即回落默认:场景模块的 Bootstrapper 开关与示例的五个时机开关静默失效。 -
面板 / 窗口的销毁反清理可被子类屏蔽 ——
OnDestroy由 private 改protected virtual并在 remarks 强制调base,同时UIModule增加按 Unity 假 null 驱逐已销毁记录的自愈(此前子类写了OnDestroy就会让注册表残留已销毁实例,之后每次 Show/Open 抛MissingReferenceException且无自愈路径)。 -
EventModule预放置路线不受DontDestroyOnLoad保护(补序列化字段 + Awake 守卫);FindAnyObjectByType跳过 inactive 预放置模块(全模块统一为FindObjectsInactive.Include,uiCanvasConfigSO/bootstrapScene/sfxSourceCount等 Inspector 配置不再从第一帧起被静默忽略)。 -
SubclassSelector下拉滤掉全部事件参数子类 —— 过滤用IsDefined(SerializableAttribute, inherit: false)只看类型自身声明的特性,而AesirEventArgs已带[Serializable]、派生类无需重复标注,导致 SO 资产化主路径下拉恒为空;改为继承判定。RaiseEvent重入时共享参数实例的Sender被内层覆写——三个内建过滤器全部依赖Sender,会静默错投或漏投;改为分发开始时取局部 sender 并逐绑定重新断言。 -
SceneAssetWrapper判等与哈希统一主键(行为变更) —— 原Equals按 GUID、GetHashCode按路径,同一场景在移动/改名后会Equals == true而哈希不等,Dictionary/HashSet静默保留重复条目、查找漏命中;现路径优先、任一侧无路径时回退 GUID。另:GUID 自愈分支补回写 Addressables 地址(此前静默降级为Unsafe被拒绝加载)。 -
SceneModule场景事件改静态持有(dontDestroyOnLoad取消勾选 + Single 模式加载销毁宿主后,DDOL 常驻系统永久收不到广播);AddedScenePaths改返回快照(此前外泄内部可变列表,遍历期变更抛异常且可强转回写);UnloadScene补"最后一个已加载场景"保护(改按真实场景数统计,排除DontDestroyOnLoad伪场景)。 -
更新器重载锁泄漏(整会话无法域重载,只能重启) —— 收尾重构为「加锁移入
try+ 局部配平标志 + 顺序改为先解锁再清 Busy」,任何异常路径恰好解锁一次;配套SessionState标记 + 域加载兜底恢复被强杀流程残留的进度条与重载锁。 -
ScriptDocGenerator的 PropertyTree 域重载泄漏(每次域重载 GC 报错)与绘制期资产库操作(单例解析收敛到OnEnable、实例按域缓存,消灭绘制回调里的CreateAsset+ 全项目重扫);ScriptDocGeneratorUtility双 Front Matter 缺陷(重生成已带 FM 的文件会叠加两份);调试检查模式ShowIf组合改单一复合条件——Odin 对同一成员的多个ShowIf是 OR 语义,该缺陷曾让 TypeData 列表无视调试开关常驻窗口。 -
UniTask 门控测试程序集从未参与编译(8 条用例静默消失) —— 该程序集自身漏声明
com.cysharp.unitask的versionDefines,而 versionDefines 产生的宏只对声明它的程序集可见,故约束永不满足、程序集被静默排除出编译管线;补一份 versionDefines 并新增两条守卫。PlayMode 套件首次真跑另暴露两处用例缺陷(进度末值断言与生产语义相反、缺场景卫生被同学例遗留的双实例污染,现以"锚场景 + 按 Scene 句柄逐个卸载"根治)。
-
[0.30.0] - 2026-09-27¶
仓库级变更:Git 分支策略重构——版本分支(AesirXxx-v<版本>,随发版轮换并删除)废弃,改为常驻滚动分支 AesirArchitecture-latest / AesirModules-latest(CI 每次推送 main 时 subtree split 滚动更新,分支名永久固定):Git URL 一次输入持续可用,升级 = Package Manager 移除后用同一 URL 重新添加;钉旧版本用 Release tag(?path=Assets/Runestone/<包目录>#v<版本>,tag 永久保留);CI 自动清理远端残留的版本分支。
Aesir Architecture¶
-
Changed
- README 安装指引改锚常驻 latest 分支——UPM 安装 URL 由固定版本分支改为
#AesirArchitecture-latest,升级口径同步为「移除后用同一 URL 重新添加,无需随发版修改」。
- README 安装指引改锚常驻 latest 分支——UPM 安装 URL 由固定版本分支改为
Aesir Modules¶
-
Changed
-
AesirDependencyInstaller补装 URL 常驻分支化——缺 Aesir Architecture 时一键补装的 Git URL 改为固定常量#AesirArchitecture-latest(不再按本包 version 拼接版本分支),移除版本推导函数与FallbackSelfVersion兜底常量(发版零联动);安装确认框与收尾日志文案同步。 -
README 安装指引改锚常驻 latest 分支(含 manifest.json 示例)。
-
[0.29.0] - 2026-09-27¶
Aesir Architecture¶
-
Added
-
Getting Started 窗口支持 UPM / 嵌入式安装的示例一键导入——未导入示例卡片:整卡点击 Toast 引导导入,右侧按钮由「去导入」(跳转 Package Manager)升级为「导入 Sample」:确认框含示例介绍与导入后位置(可取消),确认后经 Package Manager Sample API(
UnityEditor.PackageManager.UI.Sample)直接导入到Assets/Samples/,成功自动重扫刷新清单;已导入幂等跳过,清单匹配不到红色 Toast 兜底;IMGUI 兜底与 Odin 版同步。 -
package.json新增 UPM 元数据链接字段(documentationUrl指向文档站 Architecture 分区、changelogUrl指向更新日志页):UPM 安装后 Package Manager 包详情页出现 View documentation / View changelog 链接;README 安装指引补充具体升级操作(Package Manager 不对 Git URL 包显示更新提示,升级 = 移除后重新添加新版本分支的 Git URL 或修改 manifest.json 分支名)。
-
-
Removed
- PlaneWar 场景引用修复菜单(
Tools → Aesir → Architecture → Samples → PlaneWar → Fix Scene References)——开发期一次性修复工具,示例场景/预制体引用已随资产固化,随Runestone.AesirArchitecture.Samples.PlaneWarMono.Editor程序集一并移除;RuntimeInitializeLoadType菜单显式 priority 995 接管 Architecture 组排序锚点,Tools/Aesir菜单布局不变。
- PlaneWar 场景引用修复菜单(
Aesir Modules¶
-
Added
package.json新增 UPM 元数据链接字段(documentationUrl指向文档站 Modules 分区、changelogUrl指向更新日志页):UPM 安装后 Package Manager 包详情页出现 View documentation / View changelog 链接。
[0.28.0] - 2026-09-27¶
Aesir Modules¶
-
Removed
package.json依赖声明整段移除(破坏性)——UPM 不支持包内 Git URL 依赖(Unity 官方硬规定,保留会使单独安装直接失败),移除后单装可成功,缺 Aesir Architecture 时经Install Dependencies菜单一键补装;com.unity.test-framework硬依赖一并移除(测试程序集已有UNITY_INCLUDE_TESTS守卫,非必需)。- 测试程序集收敛(破坏性)——每包只保留
xxx.Tests.Editor(EditMode)与xxx.Tests(PlayMode)两个测试程序集:Runestone.AesirModules.Scene.Tests并入包级 EditMode 程序集;包级 EditMode 改名Runestone.AesirModules.Tests.Editor;PlayMode 程序集改名Runestone.AesirModules.Tests。
-
Changed
- Scene 模块设置双窗口与无 Odin 编译修复——
SceneEditorSettings数据层#if ODIN_INSPECTOR包裹展示特性;Odin 版窗口迁入守卫程序集;新增原生 IMGUI 兜底窗口(OdinWindowOpener 路由,更新器双窗口同款);菜单更名Scene Module Settings;无 Odin 环境 UPM E2E 0 编译错误(修复前 108 个 CS0246)。 Install Dependencies补装菜单适用范围扩展——UPM 单独安装本包(缺 Aesir Architecture、核心程序集编译失败)同样触发一键补装;安装教程改为两包分别添加。
- Scene 模块设置双窗口与无 Odin 编译修复——
Aesir Architecture¶
-
Changed
Tools → Aesir → Check for Updates菜单按安装形态显隐——扫描不到 Assets 形态的 Aesir 包安装时(纯 UPM 形态)菜单整体隐藏,Assets 形态安装(含与 UPM 混合并存)时照常显示。
[0.27.1] - 2026-09-27¶
Aesir Modules¶
Fixed
- UniTask 集成的程序集名错误(asmdef 引用名与宏维护器检测名) — UniTask 的命名空间名
Cysharp.Threading.Tasks被误当作程序集名使用(com.cysharp.unitask 包内 asmdef 实际名为UniTask):①核心与适配程序集的 asmdefreferences解析不到任何程序集,含 UniTask 的消费工程刷新即报CS0246('Cysharp'/'UniTaskVoid'找不到);②AesirUniTaskDefineKeeper按该名检测域内程序集恒为 false,unitypackage / DLL 安装形态下已装 UniTask 的工程全局宏AESIR_MODULES_UNITASK反被误删、UniTask 分支与适配程序集静默失效零报错(UPM 安装形态宏由 versionDefines 管理,未受影响——多数工程未察觉的原因)。现 references 改按程序集名UniTask引用;检测改为白名单(UniTask——asmdef 源码 / unitypackage 形态;Cysharp.Threading.Tasks——NuGet 预编译 DLL);AesirUniTaskDefineKeeperTests新增命名守卫 2 用例(白名单含真实程序集名 + 两处 asmdef 引用锁定),共 7 用例
Aesir Architecture 本版本无功能变更,随版本配套发布。
[0.27.0] - 2026-09-27¶
Aesir Architecture¶
Added
- 更新器单包更新入口 — 包列表每行新增「更新」按钮(IMGUI 与 Odin 窗口同步),另一已知包在场且落后时确认框前置「配套版本警告」,提示但不阻止
- 「全部更新」升级为"补全 + 更新"语义 — 目标扩展为"过期包 + 缺失的已知包补装",确认框逐包标注「更新 / 新安装」并前置缺包说明
Fixed
- 「全部更新」在 GitHub 直连不可用时卡死在下载进度条 — unitypackage 下载按「直连 → 镜像站代理(ghproxy.net / gh-proxy.com)」逐线路兜底,全部失败时异常附手动下载指引
- 更新进度条不可取消 — 下载阶段进度条可随时点「取消」中止,取消后温和收尾(区分已完成导入与未更新的包)
- 更新流程收尾异常导致程序集重载锁泄漏 — 收尾重构为配平守卫结构,任何异常路径恰好解锁一次;顺序改为「先解锁、再清忙碌标记」,不再存在死锁窗口
AESIR_ARCHITECTURE宏确保器写入时机重入风险(预防性加固) — 写宏推迟到EditorApplication.delayCall,仅在符号缺失时写入- Tools/Aesir 组菜单排序随域重载抖动 — Getting Started 菜单优先级调整,稳定居 Tools/Odin 组之后并自动插独立分割线
Changed
- 移除 DDOL 关闭时的运行时 Warning 提醒日志 — 非 DDOL 提示完全由 Inspector 信息框承担
- DDOL 开关字段前移至类声明首位 — 确立各单例类「DDOL 开关在最上」的统一排布
- 更新确认框文案重构 — 全部更新与单包更新分别构建确认文案;
UpdatePackagesAsync返回UpdateResult(已完成包 / 是否取消 / 未更新包)
Removed
- 移除更新器更新前自动备份机制(
.aesir-backup/) — 全量复制数千文件对消费者 git 仓库构成无谓噪音;回滚走 GitHub Releases 旧版 unitypackage 重新导入(确认框已明示),BackupRunestone/UpdateResult.BackupPath等 API 一并移除
Aesir Modules¶
Added
- Scene 模块 UniTask 适配(新程序集
Runestone.AesirModules.UniTask) — 安装 UniTask 时内部流程自动改为 UniTask 驱动,新增可 await 的SceneModuleUniTaskAPI;宏AESIR_MODULES_UNITASK由 versionDefines + 编辑器宏维护器自动维护 - UI 模块全局配置资产
UIModuleConfigSO(单例) — 窗口蒙版模式等模块级配置迁出UIModule序列化字段,不再要求预放置;加载器注册 → Resources 兜底 → 内存默认实例三级解析,编辑器自动创建兜底资产 - 场景模块全局配置资产
SceneModuleConfigSO(单例) — 承载全局启动场景兜底与加载进度归一化上限,设计对齐UIModuleConfigSO - Script Doc Generator 静态 API(
ScriptDocGeneratorAPI) — 面板的无 UI 等价入口,供自动化脚本与 AI 直接调用(按类型/程序集/文件夹生成,返回ScriptDocGenerationResult)
Changed(含破坏性)
SceneModule公开 API 静态门面化(破坏性) — 全部公开成员改为静态(直接SceneModule.LoadSceneSingle(...)),实例侧全私有(守护用例锁定)- 窗口蒙版模式配置迁移至
UIModuleConfigSO(破坏性) — 移除UIModule的maskMode序列化字段,升级后以配置资产为准 - 加载进度上限配置迁移至
SceneModuleConfigSO— 常量 0.9 改为配置资产字段,消费端钳制 (0, 1] - 移除各模块 DDOL 关闭时的运行时 Warning 提醒日志;DDOL 开关字段统一前移至类声明首位
- Script Doc Generator「调试检查模式」重排至窗口最底部 — TypeData 中间结果列表位于开关下方,提示三态化
Fixed
- Script Doc Generator 调试检查模式关闭时 TypeData 列表仍显示 — 根因是 Odin 对同一成员的多个 ShowIf 为 OR 语义,现合并为复合条件属性(AND)
- Script Doc Generator 调试模式警告信息框表达式解析错误 —
$value误用,改为@成员名根实例上下文解析 - Script Doc Generator 窗口 PropertyTree 未释放 —
OnDisable释放并置空,消除 GC 警告 - Script Doc Generator 绘制回调内解析资产库单例导致卡顿与 "GUIStateObj is deleted" 报错 — 单例解析收敛到
OnEnable+ 按域缓存
[0.26.0] - 2026-09-25¶
Aesir Architecture¶
Added
- 更新器检测线路可见化 — 检测结果新增线路模型(直连 GitHub / 镜像站 / CDN 中转):窗口显示「GitHub 直连是否可用(可用即版本信息 100% 实时)」与「最终获取线路」,新增「检测详情(各层尝试)」折叠区(含每层耗时与失败原因),结果来自 CDN 中转时额外给出延迟提示
Changed
- 更新器版本检测改为「直连 GitHub → 镜像站 → CDN 中转」三层兜底(修复新版本检测延迟) — 此前 jsDelivr CDN 排在首位,其分支缓存最长约 12 小时,刚发布的版本在窗口里仍会显示为旧版本。现直连层依次尝试 Releases API、
releases/latest的 302 探测、仓库内update-info.json的直连 raw(单源超时 5 秒即落下一层),直连不可用才落镜像站(ghproxy.net / gh-proxy.com,代理 raw 内容、版本实时),最后才是 CDN 中转;只有 tag 的结果会按同 tag 校验补齐文件清单,拒绝陈旧清单避免错删文件
Fixed
- 更新/检测缺少超时,进度条可能长时间卡住 — 连接检测与 unitypackage 下载补齐硬性墙钟上限:单源检测 5 秒、整轮检测 30 秒(超时后不再发起新请求并留痕)、下载「总时长 120 秒 + 连续 30 秒无进展」双判据;任一超时都会中止请求并抛明确异常,上层必定收起进度条
- 两个包连续更新时流程可能中途断裂(进度条停留 + 按钮提前可点) — 导入 unitypackage 带来的脚本变更会触发域重载,异步流程随旧域消失导致第二个包等不到、进度条停在上一包的导入文案上,而忙碌标志被重置又让按钮可点。现整段更新流程锁住程序集重载、只在全部收尾后解锁一次;导入期间先收起本工具进度条避免与 Unity 自带导入条互相覆盖;另加域重载兜底收尾
- Odin 版更新器窗口正文被渲染成「禁用灰」 — Odin 对不可编辑属性会推入禁用绘制作用域,导致说明框、列表标签、行文本与状态行全部呈禁用态;现按 Odin 官方做法标注
[EnableGUI]强制按可用状态绘制(不可编辑语义不变),实测文字亮度 128 → 196
Aesir Modules¶
- 与 Aesir Architecture 同步发布 0.26.0(版本号对齐,本包无功能变更)
[0.25.1] - 2026-09-25¶
Aesir Modules¶
Fixed
- 场景测试套件把测试场景常驻 EditorBuildSettings(并被打进玩家构建) — 原先经
[InitializeOnLoadMethod]在编辑模式域加载期把两个测试场景登记为 enabled 条目且从不摘除,条目随ProjectSettings/EditorBuildSettings.asset落盘、进玩家构建;现改为IPrebuildSetup在进入 Play 前的编辑模式阶段登记、IPostBuildCleanup退出 Play 后按名摘除,条目仅存在于本次运行期间,另有域加载兜底清扫回收被强杀遗留的条目。新增 EditMode 守护用例锁定「测试场景不得常驻 BuildSettings」 - SceneModule 测试无法随包进入实际工程 — 测试原先硬依赖宿主工程存在
Assets/Scenes/SampleScene.unity(消费工程可能已删除它),缺失时FromScenePath直接抛异常;现由 SetUp 在缺失时从包内最小场景夹具临时复制、TearDown 按「谁创建谁删除」还原(含空目录)。测试资产路径不再写死 Assets 相对路径,改为按文件名经 AssetDatabase 定位(Assets 安装 / 嵌入式包 / UPM Git 安装自适应)
Aesir Architecture¶
- 与 Aesir Modules 同步发布 0.25.1(版本号对齐,本包无功能变更)
[0.25.0] - 2026-09-25¶
Aesir Modules¶
Fixed
- Script Doc Generator 增量重生成产出双 Front Matter — Zensical 生成器自产 YAML 头后,增量合并逻辑会把旧文件的 Front Matter 再拼一份到新内容前,对已存在文档重生成必然产出双重头部;合并逻辑收敛为
MergeFrontMatterWhenMissing:新内容自带 Front Matter 时以新生成的为准,不自带(如中文 API 生成器)仍保留旧文件头部。新增 EditMode 回归测试 4 用例
Aesir Architecture¶
- 与 Aesir Modules 同步发布 0.25.0(版本号对齐,本包无功能变更)
[0.24.0] - 2026-09-25¶
Aesir Architecture¶
Added
- Aesir Getting Started 窗口 — 菜单
Tools → Aesir → Getting Started(priority -1000 居顶 + 独立分割线):概览页展示包卡片(含未安装包占位引导),包页按教学分组列出示例;整卡点击定位示例文件夹,带场景的示例经「打开场景」按钮直达(先保存当前场景一次再切换),结果经右下角 Toast 提示。数据层以各包 package.json samples 清单为唯一真源;IMGUI 兜底 + Odin 动效窗口经OdinWindowOpener委托路由 - 示例构建剔除钩子 — 构建时自动把 Build Settings 场景列表中的 Aesir 示例场景从本次构建剔除并输出
[Aesir Build]日志(持久数据不动);「示例不进玩家构建」自此覆盖脚本与场景两条路径 - 安装位置锚点机制 — 包根
AesirPathLookup.asset锚点(参照 Odin Inspector 同款资产),AesirAssetPaths三级解析实际安装根——Runestone 可整体移动到项目任意文件夹,构建剔除 / 包更新器 / Getting Started 三个消费端全部跟随 - 示例脚本构建剔除守护测试 — 运行时示例程序集内每个 .cs 必须整文件
#if UNITY_EDITOR包裹,漏包裹在 EditMode 测试失败
Changed
- 更新器 Odin 窗口标题区改手绘(移除灰暗
[Title]);Tools/Aesir 菜单按包分组(包专属项归入Architecture/、Modules/子菜单);Check for Updates 移至菜单最底部(1100 + 分割线);QuickCreateSOMenuItem移入Editor/MenuItems/;AesirArchitecturePlayerLoop/AesirScheduler文件归位Runtime/Common/
Renamed(破坏性变更)
ScriptingSymbolUtility→ScriptingSymbolEditorUtility(Utilities 目录命名规范,外部脚本直接引用需同步更名)
Aesir Modules¶
Added
- UI 模块 Canvas 根窗口形态 — 与 Panel 并列的第二种 UI 形态:窗口预制体根节点自带 Canvas,挂 UIRoot 下(不经四层 Canvas),
sortingOrder默认 500 恒在面板四层之上;静态 APIUIModule.Open<T>()/Close<T>()/GetWindow<T>()等;预制体结构约定Mask(蒙版) +Content(内容容器) - 窗口蒙版遮罩机制 —
maskMode单遮(仅最高层可见窗口蒙版生效)/ 叠遮(各窗口独立),运行时可切换;蒙版点击经OnMaskClicked()虚方法默认按closeOnMaskClick关闭 - Binder 窗口感知 — 基类下拉含
AesirBaseWindow家族,根节点带 Canvas 时默认脚本名后缀Window - 示例 UI Basic Usage(
Samples/UI/01_BasicUsage,已登记 samples);窗口与蒙版 EditMode 测试 22 用例 - 缺依赖一键补装(
AesirDependencyInstaller) — unitypackage 形态下 Aesir Architecture 缺失时,菜单Tools → Aesir → Modules → Install Dependencies确认后经 UPM 自动补装;配套 package.json 依赖由不可解析的 semver 改为 Git URL 版本分支(UPM 安装时自动递归拉取);新增零引用Runestone.AesirModules.Editor.Bootstrap程序集
Changed
- Script Doc Generator / Scene Editor Settings 菜单归入
Tools/Aesir/Modules/;Odin / Addressables 细分程序集锚点由Common/迁至Integration/(程序集名与引用零变化);示例KeyPressedEvent的 using 指令移入#if UNITY_EDITOR内
Planned(下期候选)
- SmartShowHide 伪隐藏(全屏窗口弹出时自动伪隐藏被遮挡面板、关闭后恢复)
[0.23.0] - 2026-09-23¶
Aesir Architecture¶
本批为全仓锐评修复与"保持极简"定位收敛,含破坏性变更(详见包内 CHANGELOG 的 [0.23.0] 段)。
- Added:
ObservableQueue<T>专属测试(8 用例,补齐四集合专属测试的最后缺口); AesirScheduler NaN 延时回归用例 - Changed: AesirScheduler NaN 延时语义与文档对齐(NaN 传播 = 永不触发);
ObservableList<T>.Move同索引零变化不通知;MiniEvent/MiniEvent<T>的 AddListener 补 null 守卫;ObservableQueue<T>结构补齐对齐其余三集合(sealed /[Serializable]/ 结构体枚举器 / 构造 null 容忍); 根 README 失实宣称修正、测试数与示例计数更新、快速开始改版为最小五概念快车道 - Removed(破坏性变更):
ObservableHashSet<T>集合代数全套 10 方法(IObservableHashSet<T>不再继承ISet<T>,需要时用内部HashSet<T>或上游 Cysharp.ObservableCollections);ObservableList<T>区间 Sort / Reverse 重载; ReadOnlySpan 批量重载(保留T[]与IEnumerable<T>双轨); Dictionary / HashSet 构造器收敛至「默认 / 初始元素 / 比较器」三个;ObservableValue<T>.SetValue别名; 调试 / 测试专用面收窄 internal(IContext与IGenericLocator<T>各删 4 个接口成员、MiniEvent.GetListeners、AesirArchitecturePlayerLoop.Reset等) - Renamed(破坏性变更):
ObservableValue<T>.Clear()→ClearListeners()——命名对齐集合家族语义
Aesir Modules¶
- Added: Binder 代码生成器同类型多组件测试 ×2(按出现序号取
GetComponents<T>()[n]); SceneModule 批量卸载重入 PlayMode 回归 - Fixed: Binder 三处 P1(Missing 脚本组件空引用 / 增量模式命名空间错位致自动挂载静默失效 / 同类型多组件错绑)+ partial 模式重生成幂等; SceneModule 批量卸载重入洞(嵌套 UnloadAllAddedScenes 截断外层快照); UIModule / AudioModule / EventModule 重复实例销毁粒度统一
Destroy(this);PrewarmPanel补键语义守卫; 三个测试 asmdef 补ODIN_INSPECTOR装配守卫; SDG 缩进正则修正与 SourceScanner 显式接口实现文档键错配修复(fail-closed 告警) - Changed: 更新器双窗口编排上提共享控制器
AesirUpdateController(消除 ~200 行双真源);ui-module.md补 Binder 两条边界声明(仅编辑期构建 / 生成产物使用 Odin 特性)
[0.22.0] - 2026-09-22¶
Aesir Architecture¶
- 可观察集合升级为 ObservableCollections 轻量内置子集 —— 新增
ObservableQueue<T>,四种集合统一单轨变更通知AddListener/RemoveListener(MiniEvent<T>承载,返回AutoRemoveListenerHandle,可绑定 Unity 生命周期自动移除):无变更的写操作不通知、批量操作逐项通知、字典值更新以 Replace 表达(旧值在 OldItem)、Move 单事件、Sort / Reverse / Clear 统一 Reset;Odin Inspector 内联调试面板(可选);与上游 Cysharp 库可在同一项目共存(程序集/包名/命名空间三层隔离) - Removed(破坏性变更) —— 轻量事件 API 全套(
AddXxxListener与四个事件参数类型)、原生CollectionChanged事件与SortOperation<T>移除,语义并入单轨事件(迁移:改订阅AddListener,按e.Action分流);移除内部加锁与SyncRoot(集合边界统一为仅主线程使用) - 测试改写为单轨断言(含句柄绑定 GameObject OnDisable 集成用例),RAA Editor EditMode 186 用例全绿
Aesir Modules¶
- 与 Aesir Architecture 0.22.0 版本同步发布,本包无功能变更
[0.21.0] - 2026-09-14¶
Aesir Architecture¶
- 包内更新器全面升级——新增 Odin Inspector 界面(与 IMGUI 兜底共用逻辑)、更新日志面板(按远程 tag 拉取包内 CHANGELOG 展示本地→远程区间段落)与更新前确认框;修复预发布版本比较(rc 与正式版判等)、移除单包更新入口(防版本撕裂)、残留清理移到导入成功之后
- 新增
AesirScheduler帧粒度时间调度原语——Delay(seconds, callback)/NextFrame(callback)纯 C# 静态 API,经 PlayerLoop BeforeUpdate 钩子结算,为无协程能力的 Model / Service / Command 提供合法延时手段;有意收窄(帧粒度/游戏时间/一次性任务/不池化) - package.json samples 登记
RuntimeInitializeLoadType示例(共 11 个可导入示例) - 修复 DDOL 根物体保护(预放置为子物体时跟随宿主)、脏排序只重排脏列表、QuickCreateSO 空资源名
- 测试扩充:View/触发器族、工具类、更新器 19→32、MiniEvent RemoveListener;PlayMode 测试卫生(断言拆分/卸载等待/全量 Warning 捕获/真实时间窗)
Aesir Modules¶
- 事件模块三缺陷修复(全仓最严重单点)——重入分发(回调内再发布事件)不再覆写共享参数数组;分发改注册表快照迭代(回调内退订/注册不干扰本趟);优先级稳定排序(同档按注册顺序);摘除"实验性"标注,文档改写快照与重入安全语义、零分配口径收敛
- 音频模块修复——补
ResetStatics静态重置(RAM 唯一漏掉的单例铁律)、PlayBgm淡出中重播同曲取消淡出续接(幂等误伤)、PlaySfx音调钳制 [0.01, 3] 不再反播;示例音量滑条改"拖动结束落键" - UI 模块——
ShowPanel/PrewarmPanel注册时序前移(OnShow 抛异常不泄漏、递归 Show 不重复实例化);re-show 强转改as判空、InstantiateInactivetry/finally 恢复源预制体、RegisterPrefab换路径诊断警告 - 场景模块——
UnloadAllAddedScenes快照迭代(广播期间嵌套加载/卸载不干扰本趟)、Single 成功路径SetActiveScene前IsValid校验;新增 RAM 首个 PlayMode 测试套件(真实加载成功路径 4 用例,Tests/Runtime/) - ScriptDocGenerator——XML 实体解码(泛型实体不再双重转义)、多成员代码块归属分析(fail-closed 跳过告警)、Default 生成器与 Zensical 收敛共享
MemberGrouper引擎(582→343 行)、杂项六项修复 - 测试扩充:EventModuleTests 22→32、AudioModuleTests 30→38、UIModuleTests 13→17、XmlSummaryToolTests 25→34、新增 Zensical 输出 7 用例
[0.20.0] - 2026-09-11¶
Aesir Architecture¶
- 新增《设计变更记录》文档——废弃机制(事件总线/ModelReplaced/120 帧轮询/初始化失败回滚/异常吞噬等十组)与设计来源统一收录,源码注释此后只描述当前行为
- 注释精简(12 文件):移除源码注释中的历史演进叙述(更名史/fake-null 演进史/复刻来源等),重复 remarks 去重
- 修复
AesirArchitecture.DontDestroyOnLoad遗留 CS0108 编译警告(补new修饰符,行为不变)
Aesir Modules¶
- 事件模块分发增强与 SO 资产化——订阅者过滤器(
ISubscriberFilter+WithTag/WithPriority/SameSceneAsEmitter/OnlySelf/InsideCollider2D,fail-closed);死引用清理(分发期自动移除已销毁订阅者);性能监控(executionMsLimit,默认关闭);AesirEventArgsSO资产发布者 +UnityEventOnAesirEvent桥接组件 +SubclassSelector子类下拉;热路径绑定键缓存(分发热路径稳态零分配,编译委托加速 ~78 倍);新增 22 用例与02_Filters/03_SOAsset示例 - 新增音频模块(2D)——
AudioModule全静态门面:SFX 独占音源轮询(每播音调/音量独立,无每播实例化开销)、BGM 淡入淡出与同曲幂等、Master/BGM/SFX 三通道音量与静音 PlayerPrefs 持久化;30 用例与01_BasicUsage示例 - 场景模块行为层补齐——
SceneModule补 DDOL 字段(修复预放置实例被自己的LoadSceneSingle销毁)、新增SetActiveScene与场景事件广播、onProgress进度回调、SceneAssetWrapper悬空判定;20 用例与专属文档 - UI 模块注册表重构(含破坏性变更)——三字典合并单注册表(键=实际类型,基类类型调用 ShowPanel 报错拒绝/HidePanel/GetPanel 警告)、层 Canvas 缺失 fail-fast 中止、
HidePanel<T>约束收紧为MonoBehaviour, IUIPanel;移除UIModule.RegisterUIRoot与IUIAssetLoader.Unload(破坏性);13 用例与专属文档 - ScriptDocGenerator 修复与增强——生成器三处输出 bug 修复(单成员类丢章节/常量表过滤写反/空继承章节)、Zensical 生成器参数与备注全链路输出、面板配置域重载不再丢失、默认输出目录移出 Assets、UI Toolkit 窗口移除(Odin 窗口为唯一入口)、Summary 工具改为
[Summary]特性优先语义 - 修复
AesirListenerAttribute缺AllowMultiple、SubscriberPriority文档口径修正(实为 4 档 First/High/Medium/Last)
[0.19.0] - 2026-09-11¶
Aesir Architecture¶
- 新增
IContext/AbstractContext<T>的UnregisterModel<TModel>/UnregisterService<TService>——按类型键摘除注册并释放实例(幂等,注销后再注册追加到顺序末尾) - 新增
AesirArchitecture.DontDestroyOnLoad只读属性——暴露 DDOL 决策取值,供运行时查询与编辑器条件提示复用 - 修复 Odin AttributeProcessor 两处信息框宣称与实现不符(类级条件 Warning 补齐/DDOL 警告改条件显示);
AbstractSubmodule.Dispose重置Initialized;快捷档示例 Model 改只读属性暴露、严格档示例缓存 Query 实例复用
Aesir Modules¶
- 版本号与 Aesir Architecture 同步更新至
0.19.0,本包本版本无功能性变更
[0.18.0] - 2026-09-10¶
Aesir Architecture¶
AesirArchitecturePlayerLoop.Register现返回AutoRemoveListenerHandle——Dispose 时自动注销本次注册,对齐全框架句柄风格;忽略返回值的既有调用不受影响- 新增
CapabilityExtensionsTests(10 用例)——CQRS 执行链首次获得测试覆盖:带参/无参命令与查询、命令链、查询组合、IController<T>默认接口实现绑定、两阶段初始化异常语义、Dispose 后单例重建 - 修复 Model 初始化阶段获取 Service 的误导性报错——明确「先全部 Model、后全部 Service」两阶段初始化下 Model 阶段无法获取 Service(与注册顺序无关),须延迟到运行期方法调用
- 修复
AbstractContext<T>.Dispose后的僵尸单例——释放后解除Instance单例缓存,再次访问重建并重新初始化全新上下文,而非返回容器已清空的空壳 - 修正三处 XML 文档失实:
AesirArchitecture组件职责(实为 DDOL 宿主,不初始化架构数据)、AesirArchitecturePlayerLoop已废弃的"周期性检测"宣称、MiniEvent"零分配"措辞(仅 Invoke 路径零分配) - 解除 Editor 工具对测试框架的结构绑定:Editor 主程序集移除
UNITY_INCLUDE_TESTSdefineConstraint、package.json 移除 test-framework 硬依赖;PlayMode 测试程序集以ODIN_INSPECTOR守卫(无 Odin 环境自动排除) RegisterCustomLifecycle(mono / GameObject, evt, callback)现将监听绑定到所在物体销毁事件自动移除(行为变更,原先不自动移除)- 重复实例去重改用
Destroy(this)不再连带销毁业务物体;私有Reset更名ClearState避免撞名 Unity 魔法方法;AbstractQuery补[Serializable]
Aesir Modules¶
- ScriptDocGenerator 模块(需 Odin)——原
Assets/ScriptDocGenerator独立工具整合为包内功能模块:反射分析 C# 类型生成结构化 API 文档(增量保留手写内容),附 Summary 工具(XML<summary>↔[Summary]双向同步);153 个单元测试汇入测试程序集;入口Tools → Aesir → Script Doc Generator
[0.17.0] - 2026-09-06¶
Aesir Architecture¶
- 新增
InternalContextAttribute—— 标记框架内部 Context(示例 / 测试用途);Aesir Modules Binder 的「Context 类型」选择器自动跳过被标记的类型 - 修复示例场景无法运行(0.14.0 起回归):示例程序集改为运行时程序集 + 示例脚本整文件
#if UNITY_EDITOR包裹 —— 编辑器内可编译、可挂载、可 Play,玩家构建整体剔除(示例类型 0 入包)
Aesir Modules¶
- Binder 组件绑定全面完善 —— 双生成模式(「同一脚本增量」默认 /「Partial 分部类」可选,默认
.designer.cs后缀);基类下拉新增AesirBasePanelView<T>/AesirBasePanelViewController<T>预选;层级右键菜单快捷挂载BinderAssistant/BinderTag;命名空间默认值与后缀候选持久化;新增 69 个 EditMode 测试 - 修复 Binder 生成脚本接口不匹配、Partial 模式覆盖手写文件、绑定校验空引用等问题
- 同步修复示例场景回归(同 Architecture 机制)
[0.16.x] - 2026-09-06¶
LICENSE.md与Third Party Notices.md移至包根,对齐 UPM 包根约定- Third Party Notices 收录设计参考条目:Cysharp/ObservableCollections(Architecture)、Eflatun.SceneReference(Modules)
[0.16.0] - 2026-09-06(Modules 主要变更)¶
SceneAssetWrapper功能增强(吸收 Eflatun.SceneReference):GUID 锚点自愈、State/UnsafeReason状态机、TryGet安全读取家族、工厂方法- Addressables 条件架构:未安装时相关代码整体不编译、零报错
- 破坏性变更:删除
AddScene/UnloadAddedScene统一为LoadSceneAdditive纯叠加追踪;ReloadScene同步改异步;SceneAssetWrapper空引用语义收紧(抛EmptySceneAssetWrapperException);加载失败全系新增onFailed回调 - 目录调整为标准 Unity 自定义包根结构(
Runtime//Editor/两级,模块以子目录存在,模块间零依赖)
[0.15.0] - 2026-09-05¶
- 新增可观察集合
ObservableHashSet<T>;新增 RuntimeInitializeLoadType 示例 - 包内更新器大陆优化:jsDelivr 多域名 → GitHub API → 302 重定向探测三级兜底
- Modules 无功能性变更(版本同步)
[0.14.0] - 2026-09-05¶
- AesirFramework 转型:AesirInspector 迁出为独立仓库;本仓库由 Aesir Architecture 与 Aesir Modules 组成
- Samples / Documentation 双目录结构(
Samples/编写主位 +Samples~/发布镜像) - 新增 PlaneWar 实战示例(Mono 版)
更早版本¶
0.13.0 及更早的完整变更(含 ObservableList / ObservableDictionary、DDOL 重设计、MVP 示例家族、Query 系统等里程碑)请查阅根 CHANGELOG与各子包内 CHANGELOG.md。