Skip to content

Releases: cout-m6o/OxGFrame

Release v3.7.0

Choose a tag to compare

@cout-m6o cout-m6o released this 30 Jul 15:40

[3.7.0] - 2026-07-30

English

  • MediaFrame

    • New Features

      • Inspector preview player for AudioBase / VideoBase
        • Play / Pause / Resume / Stop with seek bar and timecode; supports all source types without entering Play Mode.
        • Video renders inside the inspector (decoded internally with VideoPlayer in VideoRenderMode.APIOnly); audio plays through AudioSampleProvider on the audio thread.
        • Detects blocked http:// sources (Insecure HTTP, 2022.1+) and offers switching to "Only in development builds".
      • Added AudioBase.GetAudioUrlFromURL(), VideoBase.GetVideoUrlFromStreamingAssets(), and VideoBase.GetVideoUrlFromURL(); init flows refactored to use them.
    • Fixes

      • Fixed inverted ignoreTimeScale (when enabled, fixedUnscaledDeltaTime is now used correctly); monoDrive FixedUpdate paths now honor the flag as well.
      • Fixed direct full-url requests when getUrlPathFromCfg is disabled (no longer requests UrlCfg and throws on an unassigned TextAsset); added UrlCfg and AudioManager null guards.
      • Fixed GetMediaComponents<U> throwing InvalidCastException for user subclasses (now filters with is).
      • Fixed AutoClearMixerExposedParams / AutoRestoreMixerExposedParams leaking other mixers' records into the target mixer (now scoped by mixer prefix).
    • Breaking Changes

      • Renamed the disabledEndEvent parameter to disableEndEvent in MediaFrames Stop/StopAll series (only affects callers using named arguments).
      • Renamed internal reuqester to requester.
  • CoreFrame

    • New Features

      • Code binding generator
        • Tail rules gain a usingNamespace field: required using directives are inserted automatically in Auto mode or prepended to the clipboard in Manual mode (leave empty to manage usings manually).
        • IDE-like namespace lookup: per-rule [Find] button (multiple candidates pop up a selection menu) plus a "Try Find All Using Namespaces" bulk button.
        • Generated content self-adapts its indentation and preserves the file BOM on write.
    • Fixes

      • Fixed CoreFrames.CPFrame.PreloadAsync<T>(packageName, assetName) dropping the generic type (preloaded the wrong type).
      • Fixed GetComponent<U> / GetComponents<U> throwing InvalidCastException for user subclasses (now uses as / OfType).
      • Fixed sync CoreFrames.USFrame.LoadScene(int buildIndex, ...) loading by name (fails for not-yet-loaded scenes); now loads by build index.
      • Fixed Binder dereferencing the bind name before validating its format (invalid names like _Node no longer abort the whole binding scan with IndexOutOfRangeException); same fix applied to the CodeBinding generator.
      • Fixed HideAll / RevealAll iterating a mutable collection (now snapshots like CloseAll; prevents InvalidOperationException when handlers close UIs).
      • Fixed CheckHasAnyHiding NRE on empty preload-mode stacks.
      • Fixed reverse/stack-by-stack force-destroy safety cleanup missing index 0 (stale destroyed references no longer remain in caches); renamed _PreprocessRemoveReserveSafety to _PreprocessRemoveReverseSafety.
      • Fixed FrameManager.Destroy popping the wrong stack element during batch destroys and added a missing null guard (now removes the exact instance).
    • Breaking Changes

      • Renamed the disabledPreClose parameter to disableOnPreClose across Close/Hide/CloseAll series (only affects callers using named arguments).
    • Adjustments

      • Renamed CoreFrames.UIFrame/SRFrame enabledUpdate/enabledFixedUpdate/enabledLateUpdate to enableUpdate/enableFixedUpdate/enableLateUpdate; old names remain as [Obsolete] forwards.
  • Common

    • New Features

      • Added the Common module (com.michaelo.oxgframe.common) — a framework-level shared module that hosts framework-wide editor tooling (Common/Scripts/Editor); every module package declares it as a dependency, so standalone module installs receive it automatically.
      • API Updater ([OxGFrame/Others/API Updater]) — a tool for aligning project code with renamed framework APIs
        • Reworked into a scan-and-review tool: scans the project, previews every deprecated API usage in a window, and only rewrites the selected items (each file keeps its BOM and line endings).
        • Rules are generated automatically from the framework's [Obsolete] members; a manual table and an optional APIUpdateRulesSettings asset cover the rest — future renames need no rule maintenance.
        • Type-aware matching: static APIs require the declaring-type prefix, inherited members only match verified subclasses, common names are never guessed, and named parameters always require manual review.
        • Overload ambiguity is resolved by call arguments automatically; unresolved usages get a dropdown to choose the new API.
        • Detects framework version changes on editor load and asks before opening the tool; never modifies files without confirmation.
  • AssetLoader

    • New Features

      • YooAsset dual-version support
        • Compiles against both YooAsset 2.x (verified with 2.3.18~2.3.19) and 3.x (verified with 3.0.3-beta~3.0.5; 3.0.5+ recommended); YOOASSET_2 / YOOASSET_3 are defined automatically from the installed package version.
        • The v3 code path uses native v3 APIs only: Options-based initialization, the new file systems, the split decryption interfaces, and raw files loaded as RawFileObject.
        • All 8 built-in cryptogram services implement the matching v3 decrypt interfaces, plus IBundleEncryptor / IManifestEncryptor on the editor side.
      • Added BuildMode.ArchiveFileBuildPipeline (YooAsset v3 only) so EditorSimulateMode simulates archive packages correctly; the BuildTool sample gains a matching "AFBP" build case.
    • Fixes

      • Fixed AssetLoaders.ReleaseScenes() throwing NRE whenever additive scenes were loaded (additive packages are now collected from the additive cache).
      • Fixed PackageEvents.PatchCheckDiskNotEnoughSpace not routing groupId, which prevented PackageOperation.onPatchCheckDiskNotEnoughSpace from ever firing (DLC patch flow stalled silently on low disk space).
      • Fixed AssetPatcher.GetPatchVersion() NRE when called before the first patch check.
      • Fixed AssetPatcher.SetPresetPackages NRE when called before PatchLauncher awakes (now falls back to BundleConfig with a warning).
      • Fixed decryption args shorter than 4 characters (e.g. "xor") throwing during PatchLauncher initialization (now uses case-insensitive StartsWith; empty args are treated as NONE).
      • Fixed download progression emitting NaN when total size is 0 (also fixed in Hotfixer events).
      • Fixed GetRawFilePath(Async) force-unloading shared raw files out from under other holders (now decrements normally).
      • Fixed UnityWebRequest / CancellationTokenSource leaks in StreamingAssetsHelper.
      • Fixed ParameterParser numeric parsing being culture-sensitive (now InvariantCulture).
    • Optimization

      • Replaced reflection type checks (IsInstanceOfType) with the is operator on the asset handle hot path.
      • DownloadSpeedCalculator now uses a private lock object and DateTime.UtcNow.
      • Modernized BundleUtility MD5 helpers (MD5.Create() with using; FileInfo overload now disposes its stream).
    • Adjustments

      • Renamed public serialized field DecryptInfo.scuredStringType to securedStringType (serialization preserved via FormerlySerializedAs).
      • Renamed IDecryptInitialize.CheckIsIntialized() to CheckIsInitialized() (breaking only for custom decryption implementations).
      • Renamed internal const DEFAULT_MAX_CONCURRENCY_MAX_DOWNLOAD_COUNT to DEFAULT_MAX_CONCURRENCY_DOWNLOAD_COUNT.
  • GSIFrame

    • Fixes

      • AddGameStage now guards against null stage instances.
      • DeleteGameStage now refuses to delete the currently running stage (prevents a dangling current stage that skips OnExit).
      • ChangeGameStage now validates the target stage exists before setting the incoming id (fail-fast with a clear error).
  • NetFrame

    • Fixes

      • All net provider events (OnOpen/OnBinary/OnMessage/OnError/OnClose) are now invoked null-safely (prevents NRE on socket threads).
      • NetNode.Send / auto-reconnect now guard against a disposed provider.
      • NetNode.Dispose() now calls GC.SuppressFinalize (disposed nodes no longer enter the finalizer queue).
    • Adjustments

      • Renamed protected field _hearBeatTicker to _heartBeatTicker.
  • Hotfixer

    • Fixes

      • CheckHotfix config-driven overloads now invoke errorAction on empty data or config parsing failure instead of stalling silently; duplicated bodies unified into one helper.
      • Hotfix assembly loading now hoists the AppDomain assembly enumeration out of the per-dll loop and safely trims the .dll extension (checks EndsWith first).
      • Fixed hotfix download progression emitting NaN when total size is 0.
  • CenterFrame

    • Fixes

      • Http.Acax now disposes its CancellationTokenSource per request (no more timer registration leaks).
  • Samples

    • New Features

      • Added "AI Agent Skills" sample (oxgframe-unity-skill) importable via Package Manager. Ships SKILL.md + 9 source-verified references that teach AI coding agents (Claude Code, Codex CLI, Cursor, etc.) OxGFrame usage; briefly covers the OxGKit APIs OxGFrame uses.
      • BuildTool sample now targets both YooAsset versions (v3 build pipeline / parameter / collector renames are bridged via version defines).
    • Fixes

      • Fixed NetFrameDemo.CloseKCP() closing the TCP node instead of KCP.
      • Fixed BuildTool Android AAB split setting failing to compile on Unity 2021 / 2022 (PlayerSettings.Android.splitApplicationBinary exists only on 2023.1+; older editors...
Read more

Release v3.6.1

Choose a tag to compare

@cout-m6o cout-m6o released this 12 Feb 15:00

[3.6.1] - 2026-02-12

English

  • AssetLoader
    • Critical Fixes

      • Fixed an issue where the Preload series methods in AssetLoaders (using assetNames[] arrays) failed to correctly refine. Also added support for preloading mixed arrays containing both Resources and Bundle asset names.
    • Adjustments

      • Adjusted the log messaging for GroupCache.

中文

  • AssetLoader
    • 緊急修正

      • 修正 AssetLoaders Preload 使用 assetNames[] 預加載的系列方法,未正確 refine 問題,並且修正支持可以混和 Resources 跟 Bundle 資源名稱數組進行預加載。
    • 調整

      • 調整 GroupCache 打印訊息。

Release v3.6.0

Choose a tag to compare

@cout-m6o cout-m6o released this 12 Feb 07:13

[3.6.0] - 2026-02-12

English

  • CoreFrame

    • Optimization

      • Significantly optimized loading by refining the logic for checking the sceneName prefix ("build#"). Utilized AsSpan to improve efficiency and reduce GC (achieving almost 0 GC).
  • AssetLoader

    • Optimization

      • Significantly optimized loading by refining the logic for checking the assetName prefix ("res#"). Utilized AsSpan to improve efficiency and reduce GC (achieving almost 0 GC).
    • Fixes

      • Fixed GroupCache (GroupBundle & GroupResources) methods by removing the forceUnload parameter. Since GroupCache uses weak references, this prevents accidental triggering of forceUnload, which could lead to reference errors, making the system safer.
    • Adjustments

      • Adjusted AssetLoaders Unload-related interfaces. Since GroupCache uses weak references, the naming convention now prioritizes the "Unload" prefix.
        • ReleaseBundleRawFiles(int groupId) -> UnloadRawFiles(int groupId)
        • ReleaseResourceAssets(int groupId) & ReleaseBundleAssets(int groupId) -> UnloadAssets(int groupId)
      • Adjusted AssetLoaders Release-related interfaces. Unified the Release interface; it no longer distinguishes between ReleaseBundle and ReleaseResources (now determined by LoadType) without affecting efficiency.
        • ReleaseBundleScenes -> ReleaseScenes
        • ReleaseBundleRawFiles -> ReleaseRawFiles
        • ReleaseResourceAssets & ReleaseBundleAssets -> ReleaseAssets
    • Third-Party Library Changes

      • Removed the built-in YooAsset library; switched to PackageManager for installation and management (if modification of YooAsset source code is required, local installation via PackageManager is still supported).
        • Currently compatible with v2.3.18
          https://github.com/tuyoogame/YooAsset.git?path=Assets/YooAsset
          

中文

  • CoreFrame

    • 優化

      • 大幅度優化加載時,需要 Refine 判斷 sceneName 前墜的方式 ("build#"),使用 AsSpan 提高效率與降低 GC (幾乎 0 GC)。
  • AssetLoader

    • 優化

      • 大幅度優化加載時,需要 Refine 判斷 assetName 前墜的方式 ("res#"),使用 AsSpan 提高效率與降低 GC (幾乎 0 GC)。
    • 修正

      • 修正 GroupCache (GroupBundle & GroupResources) 方法,移除方法中的 forceUnload 參數,主要是 GroupCache 為軟引用,避免誤觸 forceUnload 導致引用錯亂,更安全。
    • 調整

      • 調整 AssetLoaders Unload 相關接口,GroupCache 為軟引用,所以以 Unload 開頭為主。
        • ReleaseBundleRawFiles(int groupId) -> UnloadRawFiles(int groupId)
        • ReleaseResourceAssets(int groupId) & ReleaseBundleAssets(int groupId) -> UnloadAssets(int groupId)
      • 調整 AssetLoaders Release 相關接口,統一 Release 接口,不在區分 ReleaseBundle 跟 ReleaseResources 了 (由 LoadType 決定),不影響效率。
        • ReleaseBundleScenes -> ReleaseScenes
        • ReleaseBundleRawFiles -> ReleaseRawFiles
        • ReleaseResourceAssets & ReleaseBundleAssets -> ReleaseAssets
    • 第三方庫改動

      • 移除 YooAsset 內置庫,改為 PackageManager 進行管理安裝 (如有需要改 YooAsset 的源碼,一樣可以透過 PackageManager 進行本地安裝)。
        • 目前兼容 v2.3.18 版本
          https://github.com/tuyoogame/YooAsset.git?path=Assets/YooAsset
          

Release v3.5.9

Choose a tag to compare

@cout-m6o cout-m6o released this 22 Jan 08:00

[3.5.9] - 2026-01-22

English

  • Adjusted

    • Adjusted default names of all configuration files (does not affect development), ref #155.

中文

  • 調整

    • 調整所有配置文件預設名稱 (不影響開發),參考 #155。

Release v3.5.8

Choose a tag to compare

@cout-m6o cout-m6o released this 08 Jan 13:02

[3.5.8] - 2026-01-08

English

  • Added

    • Added package.json to each module, allowing independent installation of modules via Git URL (please ensure correct dependency installation order).
      • AssetLoader
      https://github.com/michael811125/OxGFrame.git?path=Assets/OxGFrame/AssetLoader
      
      • CoreFrame (依賴 AssetLoader)
      https://github.com/michael811125/OxGFrame.git?path=Assets/OxGFrame/CoreFrame
      
      • MediaFrame (依賴 AssetLoader)
      https://github.com/michael811125/OxGFrame.git?path=Assets/OxGFrame/MediaFrame
      
      • Hotfixer (依賴 AssetLoader)
      https://github.com/michael811125/OxGFrame.git?path=Assets/OxGFrame/Hotfixer
      
      • GSIFrame
      https://github.com/michael811125/OxGFrame.git?path=Assets/OxGFrame/GSIFrame
      
      • CenterFrame
      https://github.com/michael811125/OxGFrame.git?path=Assets/OxGFrame/CenterFrame
      
      • NetFrame
      https://github.com/michael811125/OxGFrame.git?path=Assets/OxGFrame/NetFrame
      
  • Organized

    • Organized shared ThirdParty libraries to be managed by the primary dependency modules.
      • For example, both Hotfixer and AssetLoader depend on UniFramework. Since Hotfixer also depends on AssetLoader, UniFramework (ThirdParty) is now managed by AssetLoader.
  • AssetLoader

    • Updated

      • Updated YooAsset to the latest commit (f0563cc).
  • MediaFrame

    • Added

      • Added conversion features to the Audio & Video Editor MenuItem, allowing Audio Clip or Video Clip to be converted into operational AudioBase and VideoBase Prefabs.

中文

  • 新增

    • 新增 package.json 至各模塊,可以獨立透過 git url 安裝各模塊 (需要確保依賴安裝順序)。
      • AssetLoader
      https://github.com/michael811125/OxGFrame.git?path=Assets/OxGFrame/AssetLoader
      
      • CoreFrame (依賴 AssetLoader)
      https://github.com/michael811125/OxGFrame.git?path=Assets/OxGFrame/CoreFrame
      
      • MediaFrame (依賴 AssetLoader)
      https://github.com/michael811125/OxGFrame.git?path=Assets/OxGFrame/MediaFrame
      
      • Hotfixer (依賴 AssetLoader)
      https://github.com/michael811125/OxGFrame.git?path=Assets/OxGFrame/Hotfixer
      
      • GSIFrame
      https://github.com/michael811125/OxGFrame.git?path=Assets/OxGFrame/GSIFrame
      
      • CenterFrame
      https://github.com/michael811125/OxGFrame.git?path=Assets/OxGFrame/CenterFrame
      
      • NetFrame
      https://github.com/michael811125/OxGFrame.git?path=Assets/OxGFrame/NetFrame
      
  • 整理

    • 整理共用 ThirdParty 由主依賴模塊管理。
      • 如 Hotfixer 與 AssetLoader 都依賴 UniFramework,但是 Hotfixer 又依賴 AssetLoader,所以 UniFramework (ThirdParty) 由 AssetLoader 管理。
  • AssetLoader

    • 更新

      • 更新 YooAsset 至最新 commit (f0563cc)。
  • MediaFrame

    • 新增

      • 新增 Audio & Video Editor MenuItem 轉換功能,可以將 Audio Clip 或者 Video Clip 轉換成實際操作的 AudioBase 與 VideoBase 的預置體 (Prefab)。

Unity_xhPm8YKRSg

Unity_S7rKvCC19X

Release v3.5.7

Choose a tag to compare

@cout-m6o cout-m6o released this 30 Dec 05:55

[3.5.7] - 2025-12-30

English

  • AssetLoader

    • Updated

      • Updated YooAsset to the latest commit (1884fab).
  • NetFrame

    • Added

      • Added NetNode.SetConnectedHandler to configure the callback method triggered upon a successful connection.
    • Fixed

      • Fixed a casting issue during buffer reception in TcpNetProvider.OnBinary.
      // Fix
      var length = arrSeg.Count;
      var rcvData = new byte[length];
      Array.Copy(arrSeg.Array, arrSeg.Offset, rcvData, 0, length);
      this.OnBinary(this, rcvData);

中文

  • AssetLoader
    • 更新

      • 更新 YooAsset 至最新 commit (1884fab)。
  • NetFrame
    • 新增

      • 新增 NetNode.SetConnectedHandler 設置已連線的回調方法。
    • 修正

      • 修正 TcpNetProvider OnBinary 接收 buffer 轉型問題。
      // Fix
      var length = arrSeg.Count;
      var rcvData = new byte[length];
      Array.Copy(arrSeg.Array, arrSeg.Offset, rcvData, 0, length);
      this.OnBinary(this, rcvData);

Release v3.5.6

Choose a tag to compare

@cout-m6o cout-m6o released this 04 Dec 10:54

[3.5.6] - 2025-12-04

English

  • AssetLoader
    • Updated

      • Updated YooAsset to v2.3.18 [Affects MiniGame development].

中文

  • AssetLoader
    • 更新

      • 更新 YooAsset 至 v2.3.18 [小遊戲開發有影響]。

Release v3.5.5

Choose a tag to compare

@cout-m6o cout-m6o released this 21 Nov 06:59

[3.5.5] - 2025-11-21

English

  • Hotfixer
    • Added HotfixSettings, allowing custom file extensions to avoid issues where some WebGL environments restrict certain extension names.
  • AssetLoader
    • Added PatchSettings, allowing custom file extensions to avoid issues where some WebGL environments restrict certain extension names.

中文

  • Hotfixer
    • 新增 HotfixSettings 可以自定義擴展名稱,避免有些 WebGL 有限制擴展名稱的請求。
  • AssetLoader
    • 新增 PatchSettings 可以自定義擴展名稱,避免有些 WebGL 有限制擴展名稱的請求。
image image

Release v3.5.4

Choose a tag to compare

@cout-m6o cout-m6o released this 06 Nov 09:38

English

  • Hotfixer
    • Added

      • Added HotfixEvents.HotfixCreateDownloader (create downloader) (#138).
        • Very important: You must register a listener for the HotfixEvents.HotfixCreateDownloader event and invoke HotfixUserEvents.UserBeginDownload.SendEventMessage(). Otherwise, the flow will keep waiting for user confirmation (#138).
      • Added HotfixEvents.HotfixDownloadProgression (download progress) (#138).
      • Added HotfixUserEvents.UserBeginDownload (user-initiated download) (#138).
    • Updated

      • Updated HotfixerDemo.
  • AssetLoader
    • Added

      • Added ParameterEntry list configuration on PatchLauncher. This allows adding extra YooAsset FileSystem parameters per mode, but you must specify the type (Ref: FileSystemParametersDefine + FileSystem).
        /// <summary>
        /// 支持的型別對應表
        /// </summary>
        private static readonly Dictionary<string, Type> _supportedTypes = new Dictionary<string, Type>(StringComparer.OrdinalIgnoreCase)
        {
            // Boolean
            { "bool", typeof(bool) },
            { "boolean", typeof(bool) },
            
            // Integer types
            { "int", typeof(int) },
            { "int32", typeof(int) },
            { "uint", typeof(uint) },
            { "uint32", typeof(uint) },
            { "byte", typeof(byte) },
            { "sbyte", typeof(sbyte) },
            { "short", typeof(short) },
            { "int16", typeof(short) },
            { "ushort", typeof(ushort) },
            { "uint16", typeof(ushort) },
            { "long", typeof(long) },
            { "int64", typeof(long) },
            { "ulong", typeof(ulong) },
            { "uint64", typeof(ulong) },
            
            // Floating point types
            { "float", typeof(float) },
            { "single", typeof(float) },
            { "double", typeof(double) },
            { "decimal", typeof(decimal) },
            
            // Other common types
            { "string", typeof(string) },
            { "char", typeof(char) }
        };
        image image
      • Added PatchLauncher.AutoUnloadBundleWhenUnused configuration parameter, applied at the YooAsset resource-management layer (Ref: YooAsset v2.3.17).
    • Updated

  • CoreFrame
    • Adjusted

      • Adjusted UIManager and SRManager defaults: FixedUpdate = true and LateUpdate = true.

中文

  • Hotfixer
    • 新增

      • 新增 HotfixEvents.HotfixCreateDownloader (建立下載器) (#138)。
        • 非常重要:一定要註冊監聽 HotfixEvents.HotfixCreateDownloader 事件,並且觸發 HotfixUserEvents.UserBeginDownload.SendEventMessage(),不然會一直等待使用者確認步驟 (#138)。
      • 新增 HotfixEvents.HotfixDownloadProgression (下載進度) (#138)。
      • 新增 HotfixUserEvents.UserBeginDownload (使用者觸發下載) (#138)。
    • 更新

      • 更新 HotfixerDemo。
  • AssetLoader
    • 新增

      • 新增 ParameterEntry 列表配置於 PatchLauncher,可以針對不同模式額外新增 YooAsset FileSystem 的參數配置,但必須表明型別 (參考:FileSystemParametersDefine + 文件系統)。
        /// <summary>
        /// 支持的型別對應表
        /// </summary>
        private static readonly Dictionary<string, Type> _supportedTypes = new Dictionary<string, Type>(StringComparer.OrdinalIgnoreCase)
        {
            // Boolean
            { "bool", typeof(bool) },
            { "boolean", typeof(bool) },
            
            // Integer types
            { "int", typeof(int) },
            { "int32", typeof(int) },
            { "uint", typeof(uint) },
            { "uint32", typeof(uint) },
            { "byte", typeof(byte) },
            { "sbyte", typeof(sbyte) },
            { "short", typeof(short) },
            { "int16", typeof(short) },
            { "ushort", typeof(ushort) },
            { "uint16", typeof(ushort) },
            { "long", typeof(long) },
            { "int64", typeof(long) },
            { "ulong", typeof(ulong) },
            { "uint64", typeof(ulong) },
            
            // Floating point types
            { "float", typeof(float) },
            { "single", typeof(float) },
            { "double", typeof(double) },
            { "decimal", typeof(decimal) },
            
            // Other common types
            { "string", typeof(string) },
            { "char", typeof(char) }
        };
        image image
      • 新增 PatchLauncher.AutoUnloadBundleWhenUnused 配置參數,作用於 YooAsset 資產管理層 (參考:YooAsset v2.3.17)。
    • 更新

  • CoreFrame
    • 調整

      • 調整 UIManager, SRManager 預設驅動 FixedUpdate = true 跟 LateUpdate = true。

Release v3.5.3

Choose a tag to compare

@cout-m6o cout-m6o released this 22 Oct 16:37

English

  • AssetLoader
    • Fixed

      • Fixed issue where CacheBundle Unload Additive Scene could not be unloaded in a single operation.
      • Fixed AssetLoaders.HasInCache to properly check if AdditiveScene exists in cache.
    • Optimized

      • Optimized CacheBundle & CacheResources async concurrent same-frame reentry cache hit insufficiency returning null (resolved using single-flight pattern), and ensured RefCount loading and unloading pairing consistency (#134).
  • CoreFrame
    • Fixed

      • Fixed scene unloading consistency when USFrame.UnloadFromBuild and USFrame.UnloadFromBundle are used interchangeably, avoiding Additive Scene count inconsistency.
    • Optimized

      • Optimized USFrame.LoadFromBuildAsync async concurrent same-frame reentry issue, avoiding Single Scene being loaded multiple times during async concurrency (#134).

中文

  • AssetLoader
    • 修正

      • 修正 CacheBundle Unload Additive Scene 無法單次卸載問題。
      • 修正 AssetLoaders.HasInCache 可以檢查到 AdditiveScene 是否存在於緩存中。
    • 優化

      • 優化 CacheBundle & CacheResources 異步併發同幀重入緩存命中不足,返回 null 的問題 (使用單飛模式解決),並且保證 RefCount 加載與卸載成對的一致性 (#134)。
  • CoreFrame
    • 修正

      • 修正 USFrame.UnloadFromBuild 與 USFrame.UnloadFromBundle 交互使用時,場景卸載的一致性,避免 Additive Scene 計數不一致。
    • 優化

      • 優化 USFrame.LoadFromBuildAsync 異步併發同幀重入問題,避免異步併發時 Single Scene 被加載多次 (#134)。