BundleConfig
Coding Style wiki
BundleConfig 是 AssetLoader 模組的執行期核心設定與工具類,集中管理資源運行模式(PlayMode)、下載與載入參數等靜態設定,並提供佈署配置檔(CdnConfig)解析、CDN 端點路徑組合與本地/內建路徑定位等工具方法。
| 命名空間 | OxGFrame.AssetLoader.Bundle |
| 類型 | public static class |
| 原始碼 | BundleConfig.cs |
using OxGFrame.AssetLoader.Bundle;
提醒 一般情況下,運行模式與 Preset Packages 由場景中 PatchLauncher 元件的 Inspector 設定配置,並於啟動時自動寫入 BundleConfig 的對應欄位,無需手動指派。
列舉
PlayMode
public enum PlayMode
{
EditorSimulateMode,
OfflineMode,
HostMode,
WeakHostMode,
WebGLMode,
WebGLRemoteMode,
CustomMode
}
資源運行模式。
| 名稱 | 值 | 說明 |
|---|---|---|
| EditorSimulateMode | 0 | 編輯器模擬模式。無需實際建置 Bundles,於編輯器中直接模擬資源運行(僅供開發階段使用)。 |
| OfflineMode | 1 | 離線模式。僅使用隨包內建資源運行,不進行遠端更新。 |
| HostMode | 2 | 聯機模式。自 Host Server(CDN)檢查版本並下載更新資源。 |
| WeakHostMode | 3 | 弱聯網模式。基於聯機模式,支援斷網時退回本地最後記錄的版本繼續運行(搭配 enableLastLocalVersionsCheckInWeakNetwork 參數)。 |
| WebGLMode | 4 | WebGL 模式。僅使用 Web 伺服器上的內建資源運行。 |
| WebGLRemoteMode | 5 | WebGL 遠端模式。支援自遠端伺服器(CDN)下載更新資源。 |
| CustomMode | 6 | 自定義模式。由開發者透過 YooAsset 初始化參數自行配置運行方式(不支援 Preset Packages 的自動初始化)。 |
BuildMode
public enum BuildMode
{
BuiltinBuildPipeline = 1,
ScriptableBuildPipeline = 0,
RawFileBuildPipeline = 2,
#if YOOASSET_3
ArchiveFileBuildPipeline = 3
#endif
}
資源建置管線模式。
| 名稱 | 值 | 說明 |
|---|---|---|
| ScriptableBuildPipeline | 0 | 可程式化建置管線(SBP, Scriptable Build Pipeline)。 |
| BuiltinBuildPipeline | 1 | 內建建置管線(Built-in Build Pipeline)。 |
| RawFileBuildPipeline | 2 | 原生檔案建置管線(Raw File Build Pipeline)。 |
| ArchiveFileBuildPipeline | 3 | 歸檔檔案建置管線(Archive File Build Pipeline)。限 YooAsset v3(YOOASSET_3)。 |
提醒 YOOASSET_2 / YOOASSET_3 由框架依安裝的 YooAsset 版本自動定義(無需手動設定),完整差異對照參考 YooAsset 版本相容性。
提醒 Preset Package 上的 buildMode 設定僅在 EditorSimulateMode 下生效。
CryptogramType 常數
public class CryptogramType
{
public const string NONE = "NONE";
public const string OFFSET = "OFFSET";
public const string XOR = "XOR";
public const string HT2XOR = "HT2XOR";
public const string HT2XORPLUS = "HT2XORPLUS";
public const string AES = "AES";
public const string CHACHA20 = "CHACHA20";
public const string XXTEA = "XXTEA";
public const string OFFSETXOR = "OFFSETXOR";
}
加解密類型識別字,用於組合解密參數字串(如 PatchLauncher 的 Decrypt Info 設定,識別字大小寫不敏感):
| 常數 | 值 | 解密參數格式 |
|---|---|---|
| NONE | "NONE" | NONE(無加密) |
| OFFSET | "OFFSET" | OFFSET, dummySize |
| XOR | "XOR" | XOR, key |
| HT2XOR | "HT2XOR" | HT2XOR, hKey, tKey, jKey |
| HT2XORPLUS | "HT2XORPLUS" | HT2XORPLUS, hKey, tKey, j1Key, j2Key |
| AES | "AES" | AES, key, iv |
| CHACHA20 | "CHACHA20" | CHACHA20, key, nonce, counter |
| XXTEA | "XXTEA" | XXTEA, key |
| OFFSETXOR | "OFFSETXOR" | OFFSETXOR, key, dummySize |
靜態欄位
運行模式與 Preset Packages
| 名稱 | 型別 | 預設值 | 說明 |
|---|---|---|---|
| playMode | PlayMode | PlayMode.EditorSimulateMode | 當前資源運行模式。由 PatchLauncher 於啟動時依 Inspector 設定寫入。 |
| playModeParameters | PlayModeParameters | null | 當前運行模式的參數配置。由 PatchLauncher 依運行模式指派對應的參數物件。 |
| listAppPackages | List<AppPackageInfoWithBuild> | null | App Preset Package 清單(預設包裹)。由 PatchLauncher 寫入。 |
| listDlcPackages | List<DlcPackageInfoWithBuild> | null | DLC Preset Package 清單(預設包裹)。由 PatchLauncher 寫入。 |
下載選項 (Download Options)
| 名稱 | 型別 | 預設值 | 說明 |
|---|---|---|---|
| maxConcurrencyDownloadCount | int | 10 | 同時併發下載數量。於建立下載器時作為預設併發數。 |
| failedRetryCount | int | 3 | 下載失敗重新嘗試次數。於建立下載器時作為預設重試數。 |
| breakpointFileSizeThreshold | uint | 20971520(20 MB) | 斷點續傳門檻(bytes)。檔案大 小達門檻時啟用斷點續傳(對應 YooAsset 檔案系統參數 RESUME_DOWNLOAD_MINMUM_SIZE)。 |
| DEFAULT_DOWNLOAD_WATCHDOG_TIMEOUT | int | 30 | downloadWatchdogTimeout 的預設值。 |
| downloadWatchdogTimeout | int | 30 | 下載器看門狗監控逾時時間。監控時間範圍內未接收到任何下載數據時,直接終止該下載任務(對應 YooAsset 檔案系統參數 DOWNLOAD_WATCH_DOG_TIME)。 |
載入選項 (Load Options)
| 名稱 | 型別 | 預設值 | 說明 |
|---|---|---|---|
| bundleLoadReadBufferSize | uint | 32768(32 KB) | 資源讀取緩衝大小(AssetBundle.LoadFromStream)。 |
| bundleDecryptReadBufferSize | uint | 32768(32 KB) | 資源解密讀取緩衝大小。 |
| autoUnloadBundleWhenUnused | bool | false | 資源引用計數歸 零時,自動釋放資源包(對應 YooAsset AutoUnloadBundleWhenUnused)。 |
處理選項 (Process Options)
| 名稱 | 型別 | 預設值 | 說明 |
|---|---|---|---|
| operationSystemMaxTimeSlice | long | 30 | 非同步作業系統每幀執行消耗的最大時間切片(毫秒,透過 YooAssets.SetOperationSystemMaxTimeSlice 套用)。 |
autoUnloadBundleWhenUnused、breakpointFileSizeThreshold、downloadWatchdogTimeout與operationSystemMaxTimeSlice於 Package 初始化階段套用至 YooAsset,如需調整請於初始化流程前設定。maxConcurrencyDownloadCount與failedRetryCount於每次建立下載器時讀取。
方法總覽
佈署配置檔 (Bundle URL Config)
| 方法 | 說明 |
|---|---|
| GetValueFromUrlCfg | 自佈署配置檔(CdnConfig)取得指定鍵的值(自動偵測加密並解密)。 |
| GetAppStoreLink | 取得主程式商店連結(store_link)。 |
| GoToAppStore | 以系統瀏覽器開啟主程式商店頁面。 |
AppConfig 取得
| 方法 | 說明 |
|---|---|
| GetAppConfigFromStreamingAssets | 自內建 StreamingAssets 讀取 AppConfig。 |
| GetAppConfigFromHostServer | 自 Host Server 下載 AppConfig(支援弱聯網回退)。 |
Host Server 端點
| 方法 | 說明 |
|---|---|
| GetHostServerUrl | 組合 App Package 的遠端下載端點 URL。 |
| GetFallbackHostServerUrl | 組合 App Package 的備援下載端點 URL。 |
| GetDlcHostServerUrl | 組合 DLC Package 的遠端下載端點 URL。 |
| GetDlcFallbackHostServerUrl | 組合 DLC Package 的備援下載端點 URL。 |
| GetHostServerAppConfigPath | 取得遠端伺服器上 AppConfig 的完整 URL。 |
| GetHostServerPatchConfigPath | 取得遠端伺服器上 PatchConfig 的完整 URL。 |
本地與內建路徑
| 方法 | 說明 |
|---|---|
| GetLocalSandboxRootPath | 取得本地持久化資源(Sandbox)根目錄路徑。 |
| GetLocalSandboxPackagePath | 取得指定 Package 的本地持久化路徑。 |
| GetBuiltinRootPath | 取得內建資源(Built-in)根目錄路徑。 |
| GetBuiltinPackagePath | 取得指定 Package 的內建路徑。 |
| GetLocalSandboxAppConfigPath | 取得本地持久化路徑中的 AppConfig 完整路徑。 |
| GetStreamingAssetsAppConfigPath | 取得 StreamingAssets 中的 AppConfig 完整路徑。 |
| GetRequestStreamingAssetsPath | 取得適用於 UnityWebRequest 的 StreamingAssets 路徑。 |
位元組讀寫工具 (Header Helper)
| 方法 | 說明 |
|---|---|
| WriteInt16 | 將 16 位元整數寫入緩衝區(little-endian)。 |
| ReadInt16 | 自緩衝區讀取 16 位元整數。 |
GetValueFromUrlCfg
public static async UniTask<string> GetValueFromUrlCfg(string key)
參數
| 參數 | 型別 | 說明 |
|---|---|---|
| key | string | 佈署配置檔中的鍵名。可使用 PatchSettings.BUNDLE_IP、PatchSettings.BUNDLE_FALLBACK_IP、PatchSettings.STORE_LINK 常數。 |
回傳值
UniTask<string> — 鍵對應的值;配置檔內容為空時回傳 string.Empty;查無鍵值時回傳 null。
說明
自內建 StreamingAssets 讀取佈署配置檔(檔名由 PatchSettings 設定決定,預設 CdnConfig.dat)並解析鍵值資料,首次讀取後會快取解析結果。
注意 讀取時自動偵測檔頭:若前 2 位元組符合加密標記 PatchSettings.CIPHER_HEADER,將使用 PatchSettings.settings.bundleUrlCfgCipher 金鑰自動解密後再解析。
範例
// 取得主要 CDN 位址(bundle_ip)
string host = await BundleConfig.GetValueFromUrlCfg(PatchSettings.BUNDLE_IP);
GetAppStoreLink
public static async UniTask<string> GetAppStoreLink()
回傳值
UniTask<string> — 主程式商店連結(佈署配置檔中 store_link 鍵的值);查無時回傳 null。
說明
自佈署配置檔取得主程式商店連結(PatchSettings.STORE_LINK)。