Skip to content

Releases: michael811125/OxGFrame

Release v3.5.1

02 Oct 12:07

Choose a tag to compare

[3.5.1] - 2025-10-02

English

  • AssetLoader
    • Modified

      • Modified the calculation and check logic for AssetCache.RetryCounter.
    • Fixed

      • Fixed a very rare same-frame reentrancy issue during AssetCache (CacheBundle, CacheResources) loading that could lead to an incorrect RefCount.

中文

  • AssetLoader
    • 修改

      • 修改 AssetCache.RetryCounter 計算與判斷方式。
    • 修正

      • 修正 AssetCache (CacheBundle, CacheResources) 加載時,極小機率出現同幀重入 (same-frame reentrancy) 問題,導致 RefCount 不正確。

Release v3.5.0

01 Oct 08:51

Choose a tag to compare

[3.5.0] - 2025-10-01

English

Please get help from ChatGPT or Google Translate.

中文

  • AssetLoader
    • 新增

      • 新增 PatchLauncher 參數 DownloadWatchdogTimeout 設定。
        image
      • 新增 AssetPatcher.GetAllPackages() 方法。
      • 新增 AssetPacher.SetPresetPackages(List appPackages, List dlcPackages) 方法。
        • 用於設置預設 APP 跟 DLC 包裹 (便於 CustomMode)。
      • 新增 AssetPacher.InitializePresetPackages() 方法。
        • 用於手動初始預設 APP 跟 DLC 包裹 (便於 CustomMode)。
      • 新增 AssetPatcher.GetBundleDecryptionServices() 方法。
        • 獲取資源解密服務 (便於 CustomMode)。
      • 新增 AssetPatcher.GetManifestDecryptionServices() 方法。
        • 獲取資源清單解密服務 (便於 CustomMode)。
      • 新增 OXGFRAME_CUSTOM_MODE 宏。
      • 新增 CustomMode,支持自定義 YooAsset 包裹運行模式 (流程繁瑣,須注意初始步驟)
        • 用於:微信小遊戲抖音小遊戲支付寶小遊戲TapTap 小遊戲CustomPlayModeParameters (自定義運行模式)、等等...。
        • 注意:當使用 CustomMode,所有 YooAsset 包裹初始皆需要自行實現
        • CustomMode 初始化流程概述:
          1. 是否有 Preset Packages 需求。
          2. 有的話,可自定義與設置 AssetPacher.SetPresetPackages(List appPackages, List dlcPackages)。
          3. 不管有沒有 Preset Packages 需求,都必須手動調用 async AssetPacher.InitializePresetPackages()
            • 輪詢 AssetPacher.isInitialized() 判斷標記是否返回 true。
      • 新增 PlayModeParameters,提高配置擴展性。
        image
        參數說明:
        public static class PlayModeParametersDefine
        {
            /// <summary>
            /// [Boolean] 初始預設包裹
            /// </summary>
            public const string INITIALIZE_PRESET_PACKAGES = "INITIALIZE_PRESET_PACKAGES";
        
            /// <summary>
            /// [Boolean] 獲取遠端 App 版號文件
            /// </summary>
            public const string FETCH_APP_CONFIG_FROM_SERVER = "FETCH_APP_CONFIG_FROM_SERVER";
        
            /// <summary>
            /// [Boolean] 版號 PATCH 檢查規則
            /// </summary>
            public const string SEMANTIC_RULE_PATCH = "SEMANTIC_RULE_PATCH";
        
            /// <summary>
            /// [Boolean] 是否自動檢查與設置請求端點 (Host Server, Fallback Host Server)
            /// </summary>
            public const string AUTO_CONFIGURE_SERVER_ENDPOINTS = "AUTO_CONFIGURE_SERVER_ENDPOINTS";
        
            /// <summary>
            /// [Boolean] 是否創建 PresetPackages 下載器
            /// </summary>
            public const string CREATE_PRESET_PACKAGES_DOWNLOADER = "CREATE_PRESET_PACKAGES_DOWNLOADER";
        
            /// <summary>
            /// [Boolean] 是否檢查硬盤空間 (當創建 PresetPackages 下載器時, 會進行檢查)
            /// </summary>
            public const string ENABLE_DISK_SPACE_CHECK_FOR_PRESET_PACKAGES_DOWNLOADER = "ENABLE_DISK_SPACE_CHECK_FOR_PRESET_PACKAGES_DOWNLOADER";
        
            /// <summary>
            /// [Boolean] 是否檢查本地最後版本 (用於弱聯網環境)
            /// </summary>
            public const string ENABLE_LAST_LOCAL_VERSIONS_CHECK_IN_WEAK_NETWORK = "ENABLE_LAST_LOCAL_VERSIONS_CHECK_IN_WEAK_NETWORK";
        }
    • 修改

      • 修改 AssetLoaders.Unload & Release 系列接口,移除異步改為同步。
    • 修正

      • 修正尚未配置 PatchLauncher 的 Preset Pacakges (空數組),當進行 AssetPacher.Check() 檢查時,無法正確處理 PatchFsmStates.VersionUpdate 跟 PatchFsmStates.ManifestUpdate 的流程。
    • 移除

      • 移除 AssetPatcher.GetPackageAssetInfosByTags 方法 (直接從 Package 獲取 AssetInfo 即可)。
      • 移除 AssetPatcher.GetPackageAssetInfosByAssetNames 方法 (直接從 Package 獲取 AssetInfo 即可)。
    • 優化

      • 優化 AssetLoaders.Release 相關接口的釋放流程。
      • 優化 AssetLoaders.Unload 相關接口為卸載指定資源,提高卸載效率。
      • 優化 PatchFsmStates.FsmCreateDownloader 群包處理判斷流程。
      • 優化 PlayMode 運行環境配置,使用 PlayModeParameters 取代,提高擴展性。
      • 優化 PackageOperation 流程。
    • 更新

      • 更新 YooAsset v2.3.14v2.3.16 (f3ebda0)。
        • 重要:v2.3.15 以上升級了資源清單版本,不相容於舊版本,建議重新提審安裝包
        • 備註:資源相互依賴卸載問題,目前先暫時解決 YooAsset issue (#650),後續會再以 YooAsset 更新為主。

CustomMode - Hotfix 初始化流程

        var hotfixPackageName = "HotfixPackage";
        var hotfixPackage = new AppPackageInfoWithBuild();
        hotfixPackage.buildMode = BundleConfig.BuildMode.ScriptableBuildPipeline;
        hotfixPackage.packageName = hotfixPackageName;
        hotfixPackage.hostServer = await BundleConfig.GetHostServerUrl(hotfixPackageName);
        hotfixPackage.fallbackHostServer = await BundleConfig.GetFallbackHostServerUrl(hotfixPackageName);
        var remoteServices = new HostServers(hotfixPackage.hostServer, hotfixPackage.fallbackHostServer);
        var bundleDecryptionServices = AssetPatcher.GetBundleDecryptionServices();
        var manifestDecryptionServices = AssetPatcher.GetManifestDecryptionServices();
        hotfixPackage.initializeParameters = new WebPlayModeParameters();
        var createParameters = hotfixPackage.initializeParameters as WebPlayModeParameters;

        /**
         * 省略...建議參考其他模式初始參數
         */

        Hotfixers.CheckHotfix
        (
            // Download and load hotfix files from HotfixPackage
            hotfixPackage,
            // Metadata for AOT assemblies
            new string[]
            {
                "mscorlib.dll"
            },
            // Hotfix assemblies
            new string[]
            {
                "HotfixerDemo.Hotfix.Runtime.dll"
            }
        );

CustomMode - Preset Packages 初始化流程

WebPlayModeParameters

        var packageNameA = "MyCustomPackageA";
        var packageA = new AppPackageInfoWithBuild();
        packageA.buildMode = BundleConfig.BuildMode.ScriptableBuildPipeline;
        packageA.packageName = packageNameA;
        packageA.hostServer = await BundleConfig.GetHostServerUrl(packageNameA);
        packageA.fallbackHostServer = await BundleConfig.GetFallbackHostServerUrl(packageNameA);
        var remoteServicesA = new HostServers(packageA.hostServer, packageA.fallbackHostServer);
        var bundleDecryptionServicesA = AssetPatcher.GetBundleDecryptionServices();
        var manifestDecryptionServicesA = AssetPatcher.GetManifestDecryptionServices();
        packageA.initializeParameters = new WebPlayModeParameters();
        var createParametersA = packageA.initializeParameters as WebPlayModeParameters;

        /**
         * 省略...建議參考其他模式初始參數
         */

        var packageNameB = "MyCustomPackageB";
        var packageB = new AppPackageInfoWithBuild();
        packageB.buildMode = BundleConfig.BuildMode.ScriptableBuildPipeline;
        packageB.packageName = packageNameB;
        packageB.hostServer = await BundleConfig.GetHostServerUrl(packageNameB);
        packageB.fallbackHostServer = await BundleConfig.GetFallbackHostServerUrl(packageNameB);
        var remoteServicesB = new HostServers(packageB.hostServer, packageB.fallbackHostServer);
        var bundleDecryptionServicesB = AssetPatcher.GetBundleDecryptionServices();
        var manifestDecryptionServicesB = AssetPatcher.GetManifestDecryptionServices();
        packageB.initializeParameters = new WebPlayModeParameters();
        var createParametersB = packageB.initializeParameters as WebPlayModeParameters;

        /**
         * 省略...建議參考其他模式初始參數
         */

        var packageNameC = "MyCustomPackageC";
        var packageC = new DlcPackageInfoWithBuild();
        packageC.buildMode = BundleConfig.BuildMode.ScriptableBuildPipeline;
        packageC.packageName = packageNameC;
        packageC.withoutPlatform = false;
        packageC.dlcVersion = "latest";
        packageC.hostServer = await BundleConfig.GetDlcHostServerUrl(packageNameC, packageC.dlcVersion, packageC.withoutPlatform);
        packageC.fallbackHostServer = await BundleConfig.GetDlcFallbackHostServerUrl(packageNameC, packageC.dlcVersion, packageC.withoutPlatform);
        var remoteServicesC = new HostServers(packageC.hostServer, packageC.fallbackHostServer);
        var bundleDecryptionServicesC = AssetPatcher.GetBundleDecryptionServices();
        var manifestDecryptionServicesC = AssetPatcher.GetManifestDecryptionServices();
        packageC.initializeParameters = new WebPlayModeParameters();
        var createParametersC = packageC.initializeParameters as WebPlayModeParameters;

        /**
         * 省略...建議參考其他模式初始參數
         */

        // 設置預設包裹
        AssetPatcher.SetPresetPackages
        (
            new List<AppPackageInfoWithBuild>()
            {
                packageA,
                packageB,
            },
            new List<DlcPackageInfoWithBuild>()
            {
                packageC
            }
        );

        // 初始預設包裹
        await AssetPatcher.InitializePresetPackages();

CustomPlayModeParameters

        var packageNameA = "MyCustomPackageA";
        var packageA = new AppPackageInfoWithBuild();
        packageA.buildMode = BundleConfig.BuildMode.ScriptableBuildPipeline;
        packageA.packageName = packageNameA;
        packageA.hostServer = await BundleConfig.GetHostServerUrl(packageNameA);
    ...
Read more

Release v3.4.7

06 Sep 16:33

Choose a tag to compare

[3.4.7] - 2025-09-07

English

  • Organized all code logging outputs to remove RichText colorization and handle coloring exclusively via the OxGKit.LoggingSystem logger.
    • Must upgrade OxGKit.LoggingSystem to v1.3.1.

中文

  • 整理所有代碼打印方式,移除 RichText 上色,統一由 OxGKit.LoggingSystem 日誌器實現上色。
  • 必須升級 OxGKit.LoggingSystem 至 v1.3.1

Release v3.4.6

18 Aug 10:41

Choose a tag to compare

[3.4.6] - 2025-08-18

English

  • CoreFrame
    • Added support for binding rules that allow multiple components.
      • Example: _Node@MyObj*Txt*Img*BtnPlus → parsed into bindings: _myObjTxt, _myObjImg, _myObjBtnPlus.

中文

  • CoreFrame
    • 新增支持綁定規則允許多組件。
      • 例如:_Node@MyObj*Txt*Img*BtnPlus -> 解析綁定為 _myObjTxt, _myObjImg, _myObjBtnPlus。

Release v3.4.5

07 Aug 11:23

Choose a tag to compare

[3.4.5] - 2025-08-07

English

  • CoreFrame
    • Added an awaitingUIExtraDuration parameter to control the buffer time for the awaiting window.
  • MediaFrame
    • Modified the preparation logic in VideoBase.
    • Fixed an issue where AudioBase did not correctly execute its preparation process, which occasionally caused playback problems.

中文

  • CoreFrame
    • 新增 awaitingUIExtraDuration 參數,可以控制等待窗體的緩衝時間。
  • MediaFrame
    • 調整 VideoBase 執行準備邏輯。
    • 修正 AudioBase 沒有正常執行準備流程,導致偶發出現播放問題。

Release v3.4.4

25 Jul 06:58

Choose a tag to compare

[3.4.4] - 2025-07-25

English

  • Adjusted the instantiation approach of the BuildTool's Manifest Encryption Services interface (No impact on usage). Existing imported samples need to be updated.

    • Added the ClearBuildCacheFiles option.
    • Added the UseAssetDependencyDB option.
  • AssetLoader

    • Adjusted the implementation of the ManifestEncryptionServices interface to unify and consolidate its structure (No impact on usage).

中文

  • 調整 BuildTool 的 Manifest Encryption Services 接口實例 (不影響使用),已經匯入的需要再次進行更新。

    • 新增 ClearBuildCacheFiles 選項。
    • 新增 UseAssetDependencyDB 選項。
  • AssetLoader

    • 調整 ManifestEncryptionServices 接口進行統一整併實現 (不影響使用)。

Release v3.4.3

24 Jul 07:59

Choose a tag to compare

[3.4.3] - 2025-07-24

English

  • Added BuildTool Extension (importable via Package Manager Samples), enabling CLI-based construction of both main application and asset bundles (can be referenced or used directly).

    • Also includes a MenuItemOxGFrame/Extensions/BuildTool/Build Bundles by Bundle Map JSON editor tool for asset bundle building via the JSON map.
  • AssetLoader

    • Modified interfaces for Manifest Services (IManifestProcessServices, IManifestRestoreServices).
      • Note: When building with YooAsset, the Manifest encryption/decryption Process and Restore options must be the same.
    • Modified PatchSetting.asset creation logic to automatically generate a Resources folder for placement.
    • Upgraded YooAsset to v2.3.14

中文

  • 新增 BuildTool Extension (從 Package Manager 的 Samples 進行匯入),可以使用 CLI 構建主程序跟資源 (可以參考或直接使用)。

    • 額外包含 MenuItem -> OxGFrame/Extensions/BuildTool/Build Bundles by Bundle Map JSON 編輯器可直接進行資源構建。
  • AssetLoader

    • 修改 Manifest Services 接口 (IManifestProcessServices, IManifestRestoreServices)。
      • 說明:如果使用 YooAsset 構建資源時,針對 Manifest 加解密選項的 Process 跟 Restore 必須選擇一樣。
    • 修改建立 PatchSetting.asset 時,會自動創建 Resources 文件夾進行放置。
    • 更新 YooAsset 至 v2.3.14

Build Bundles by Bundle Map JSON Editor

image image

Release v3.4.2

22 Jul 04:17

Choose a tag to compare

[3.4.2] - 2025-07-22

English

  • Hotfixer
    • Fixed an issue where packageName was not correctly set when initializing the Hotfix Package using packageInfoWithBuild.

中文

  • Hotfixer
    • 修正使用 packageInfoWithBuild 初始 Hotfix Package 時,未正確設置 packgeaName 的問題。

Release v3.4.1

18 Jul 09:42

Choose a tag to compare

English

  • Adjusted access modifiers for certain parameters.

  • AssetLoader

    • Adjusted appconfig.json to differentiate write contents between built‑in and CDN.
    • Adjusted BundleHelper.ExportAppConfig method to remove the semanticRule parameter.
  • Hotfixer

    • Added GetAOTAssemblyNames to get a cached list of AOT assembly names (including the “.dll” extension, e.g. "mscorlib.dll").
    • Added GetHotfixAssemblyNames to get a cached list of Hotfix assembly names (including the “.dll” extension, e.g. "HotfixerDemo.Hotfix.Runtime.dll").
    • Added GetAotAssemblyNamesWithoutExtensions to get a cached list of AOT assembly names (without the “.dll” extension, e.g. "mscorlib").
    • Added GetHotfixAssemblyNamesWithoutExtensions to get a cached list of Hotfix assembly names (without the “.dll” extension, e.g. "HotfixerDemo.Hotfix.Runtime").
  • CoreFrame

    • USFrame
      • Added SetActiveSceneRootGameObjectsAsync, an asynchronous method that spreads work across frames and lets you specify how many scene root GameObjects to activate per frame.

中文

  • 調整部分參數存取權限。

  • AssetLoader

    • 調整 appconfig.json 區分內置與 CDN 的寫入內容。
    • 調整 BundleHelper.ExportAppConfig 方法,移除 semanticRule 參數。
  • Hotfixer

    • 新增 GetAOTAssemblyNames 獲取 AOT 程序集名稱緩存清單方法 (包含 .dll 擴展名 -> ex: "mscorlib.dll")。
    • 新增 GetHotfixAssemblyNames 獲取 Hotfix 程序集名稱緩存清單方法 (包含 .dll 擴展名 -> ex: "HotfixerDemo.Hotfix.Runtime.dll")。
    • 新增 GetAotAssemblyNamesWithoutExtensions 獲取 AOT 程序集名稱緩存清單方法 (不包含 .dll 擴展名 -> ex: "mscorlib")。
    • 新增 GetHotfixAssemblyNamesWithoutExtensions 獲取 Hotfix 程序集名稱緩存清單方法 (不包含 .dll 擴展名 -> ex: "HotfixerDemo.Hotfix.Runtime")。
  • CoreFrame

    • USFrame
      • 新增 SetActiveSceneRootGameObjectsAsync 異步方法,支持分散幀處理,可以設置每幾幀要顯示幾個場景根物件。

Release v3.4.0

11 Jul 04:04

Choose a tag to compare

[3.4.0] - 2025-07-11

English

  • Organized debug printing levels (Print, PrintWarning, PrintError, PrintException) to implement clear log level differentiation.

  • AssetLoader

    • Added PatchLauncher configuration for Manifest Decrypt Info.
    • Added PatchLauncher.operationSystemMaxTimeSlice parameter configuration (Process Options) to set the YooAsset asynchronous system’s maximum time slice consumed per frame (in milliseconds).
    • Added PatchLauncher.bundleLoadReadBufferSize parameter configuration (Load Options) to configure the AssetBundle read buffer size (in bytes).
    • Added PatchLauncher.bundleDecryptReadBufferSize parameter configuration (Load Options) to configure the AssetBundle decryption read buffer size (in bytes).
    • Added an implementation of ManifestServices for encrypting and decrypting YooAsset manifest file.
    • Optimized the BundleConfig release workflow.
    • Removed the YooAssetBridge.YooAssetSettingsData.GetYooResourcesFullPath() method.
    • Removed the MenuItem OxGFrame Pre-Export Built-in Catalog File (BuildinCatalog) used by YooAsset.
    • Removed the unused BuiltinPackageCatalog class, including its PatchSetting configuration parameters.
    • Upgraded YooAsset to v2.3.12.
  • NetFrame

    • Modified the INetTips.OnConnectionError parameter type to object.

中文

  • 整理 Debug 打印層級 (Print, PrintWarning, PrintError, PrintException),實現 Log Level 的區分。

  • AssetLoader

    • 新增 PatchLauncher 對於 Manifest Decrypt Info 的配置。
    • 新增 PatchLauncher.operationSystemMaxTimeSlice 參數配置 (Process Options),用於 YooAsset 的異步系統設置參數,每幀執行消耗的最大時間切片。
    • 新增 PatchLauncher.bundleLoadReadBufferSizeh 參數配置 (Load Options),用於配置資源讀取緩衝大小。
    • 新增 PatchLauncher.bundleDecryptReadBufferSize 參數配置 (Load Options),用於配置資源解密讀取緩衝大小。
    • 新增 ManifestServices 實作,用於 YooAsset Manifest 清單的加解密。
    • 優化 BundleConfig 釋放流程。
    • 移除 YooAssetBridge.YooAssetSettingsData.GetYooResourcesFullPath() 方法。
    • 移除 MenuItem -> OxGFrame Pre-Export Built-in Catalog File (BuildinCatalog) used by YooAsset。
    • 移除未使用類別 BuiltinPackageCatalog,包含 PatchSetting 配置參數。
    • 更新 YooAsset 至 v2.3.12
  • NetFrame

    • 修改 INetTips OnConnectionError 參數為 object 型別。

image image