跳至主要内容
版本:v3

AssetPatcher

重要 注意 提醒

Coding Style wiki


AssetPatcherAssetLoader 模組的更新補丁統一入口(Facade),底層由 YooAsset 驅動,涵蓋補丁流程控制(檢查、修復、暫停、恢復、取消)、Package 生命週期管理(初始化、更新、卸載、預設 Package 切換)、下載器建立與多 Package 合併下載,以及版本、狀態與路徑查詢。

命名空間OxGFrame.AssetLoader
類型public static class
原始碼AssetPatcher.cs
using OxGFrame.AssetLoader;
using OxGFrame.AssetLoader.Bundle; // PackageInfoWithBuild、BundleConfig.PlayMode 等型別

注意 使用前須於啟動場景中建置 PatchLauncher(負責設定 PlayMode、Preset Packages 與下載選項),相關設定請參考 AssetLoader 介紹

快速上手

// 啟動補丁檢查流程(版本比對 → 清單更新 → 建立主下載器 → 下載)
AssetPatcher.Check();

// 等待補丁流程完成後,即可開始載入資源
while (!AssetPatcher.IsDone())
await UniTask.Yield();

// 初始化 DLC Package 並更新版本與清單
bool success = await AssetPatcher.InitDlcPackage(new DlcPackageInfoWithBuild()
{
packageName = "Dlc01Package",
dlcVersion = "v1.0"
}, updatePackage: true);

// 切換預設 Package(AssetLoaders 未指定 packageName 時使用)
AssetPatcher.SwitchDefaultPackage("Dlc01Package");

// 查詢目前資源版本
string patchVersion = AssetPatcher.GetPatchVersion();

通用規則

Package 概念

OxGFrame 以 Package 為資源管理單位(對應 YooAsset 的 ResourcePackage):

類型說明
App Package主要資源包,遠端路徑跟隨主程式版號(App Version)。
DLC Package擴充資源包,具有獨立版號路徑(dlcVersion),可依需求動態初始化與卸載。
  • Preset Packages:於 PatchLauncher Inspector 配置的預設 Package 清單(App 與 DLC),啟動時(Awake)自動初始化,並合併納入補丁流程的主下載;清單中首個 App Package 會被設為預設 Package
  • 預設 PackageAssetLoaders 各載入方法未指定 packageName 時,一律使用預設 Package(可透過 SetDefaultPackageSwitchDefaultPackage 變更)。
  • Package 資訊基類 PackageInfoWithBuild 欄位:
欄位型別說明
buildModeBundleConfig.BuildMode建置管線(僅 EditorSimulateMode 使用):ScriptableBuildPipelineBuiltinBuildPipelineRawFileBuildPipeline
packageNamestringPackage 名稱。
hostServerstring自訂資源伺服器 URL(空值時依配置自動組合)。
fallbackHostServerstring自訂備用資源伺服器 URL(空值時依配置自動組合)。
initializeParametersInitializeParametersYooAsset 初始化參數(CustomMode 使用)。

AppPackageInfoWithBuild 直接繼承上表;DlcPackageInfoWithBuild 額外增加:

欄位型別說明
withoutPlatformboolDLC 遠端路徑是否略過平台層級。
預設值false
dlcVersionstringDLC 版本。空值時自動使用最新(依日期)版本。

PlayMode 運行模式

PatchLauncher 設定的 BundleConfig.PlayMode 決定資源系統的運行方式:

說明
EditorSimulateMode編輯器模擬模式:無需實際建置 AssetBundle,於編輯器中模擬運行。
OfflineMode離線模式:僅使用內建(StreamingAssets)資源,不進行遠端更新。
HostMode主機模式:連線資源伺服器進行版本檢查、清單更新與下載。
WeakHostMode弱聯網主機模式:同 HostMode,但斷網時可改用上次記錄的本地版本繼續運行(本地資源需完整)。
WebGLModeWebGL 模式:僅使用 Web 平台內建資源(WebGL 平台限定)。
WebGLRemoteModeWebGL 遠端模式:內建資源搭配遠端資源伺服器(WebGL 平台限定)。
CustomMode自訂模式:自行提供 YooAsset InitializeParameters;Preset Packages 需透過 SetPresetPackages 手動配置。

提醒 打包後可透過 Scripting Define Symbols(OXGFRAME_OFFLINE_MODEOXGFRAME_HOST_MODEOXGFRAME_WEAK_HOST_MODEOXGFRAME_WEBGL_MODEOXGFRAME_WEBGL_REMOTE_MODEOXGFRAME_CUSTOM_MODE)強制覆蓋 PlayMode。

YooAsset 版本相容性

v3.7.0 起,同時支援 YooAsset 2.x(驗證 2.3.18~2.3.19)與 YooAsset 3.x(驗證 3.0.3-beta~3.0.5,建議 3.0.5+):

  • 依安裝的 com.tuyoogame.yooasset 套件版本,自動定義 YOOASSET_2(2.x)或 YOOASSET_3(3.x),無需手動設定宏
  • 公開 API 簽名於兩版本下完全一致,專案程式碼無需修改,版本差異由框架內部分支處理。
  • 自訂解密實作介面的 IDecryptInitialize.CheckIsIntialized() 已更名為 CheckIsInitialized()(僅影響自訂解密實作)。
項目YooAsset 2.xYooAsset 3.x
初始化與檔案系統傳統 InitializeParametersv3 原生 Options API 與新版檔案系統(內部處理)
BundleConfigBuildMode.ArchiveFileBuildPipeline不支援支援(含 EditorSimulateMode 歸檔包模擬)
內建 8 種加解密服務支援支援(實作 v3 拆分式解密介面;Editor 端另實作 IBundleEncryptor / IManifestEncryptor
下載失敗回呼 onDownloadError 型別DownloaderOperation.DownloadError同簽名別名 Action<DownloadErrorEventArgs>(用法不變)
原生檔案(RawFile)載入RawFileHandleRawFileObject / EnsureBundleFileAsync(行為一致)

補丁流程與主下載器

  • CheckRepair 會啟動內部狀態機驅動的補丁流程(版本比對 → 清單更新 → 建立下載器 → 下載 → 完成),流程各階段透過 PatchEvents 發送事件,供 UI 顯示進度與互動。
  • PauseResumeCancel 僅作用於補丁流程建立的主下載器;透過 GetPackageDownloader 等方法自行建立的下載器不受影響。
  • 流程完成後 IsDone 回傳 true,即可開始透過 AssetLoaders 載入資源。

DownloadInfo 結構

public struct DownloadInfo

GetDownloadInfoWithCombinePackages 系列方法的回傳型別,用於預先統計待下載內容:

欄位型別說明
totalCountint待下載的檔案總數。
totalBytesulong待下載的總位元組數。

補丁狀態查詢

查詢補丁與資源系統的目前狀態。

方法總覽

方法說明
IsInitialized資源系統(Preset Packages)是否已完成初始化。
IsReleased資源系統是否已釋放(呼叫過 Release)。
IsCheck是否正在執行補丁檢查流程。
IsRepair是否正在執行修復流程。
IsDone補丁流程是否已全部完成。

IsInitialized

public static bool IsInitialized()

回傳值

bool — Preset Packages 是否已全部初始化完成。

說明

判斷資源系統是否已完成初始化(PatchLauncher 啟動時的 Preset Packages 初始化,或手動呼叫 InitSetupPresetPackages 成功後為 true)。


IsReleased

public static bool IsReleased()

回傳值

bool — 是否已呼叫過 Release 釋放資源系統。

說明

判斷資源系統(YooAsset)是否已釋放。釋放後 AssetLoaders 的 Bundle 卸載相關操作將被跳過。


IsCheck

public static bool IsCheck()

回傳值

bool — 是否正在執行補丁檢查流程。

說明

判斷是否正在執行 Check 啟動的補丁檢查流程(流程完成或取消後為 false)。


IsRepair

public static bool IsRepair()

回傳值

bool — 是否正在執行修復流程。

說明

判斷是否正在執行 Repair 啟動的修復流程。


IsDone

public static bool IsDone()

回傳值

bool — 補丁流程是否已全部完成。

說明

判斷補丁流程是否已完成且可開始載入資源。啟動 CheckRepair 時會重置為 false,流程結束後為 true

範例

AssetPatcher.Check();

while (!AssetPatcher.IsDone())
await UniTask.Yield();

// 補丁完成,開始載入資源

補丁流程操作

控制補丁流程與主下載器的行為。

方法總覽

流程啟動

方法說明
SetPresetPackages於運行時自訂 Preset App/DLC Packages(CustomMode 用)。
InitSetupPresetPackages手動初始化 Preset Packages。
Check啟動補丁檢查流程。
Repair啟動修復流程(清除本地快取後重新下載)。

主下載器控制

方法說明
Pause暫停主下載器。
Resume恢復主下載器。
Cancel取消主下載器的下載。

SetPresetPackages

public static void SetPresetPackages(List<AppPackageInfoWithBuild> appPackages, List<DlcPackageInfoWithBuild> dlcPackages)

參數

參數型別說明
appPackagesList<AppPackageInfoWithBuild>Preset App Packages 清單(首個為預設 Package)。
dlcPackagesList<DlcPackageInfoWithBuild>Preset DLC Packages 清單。

說明

於運行時自訂 Preset Packages 配置(覆蓋 PatchLauncher 的清單設定)。

提醒PatchLauncher 尚未喚醒(Awake)前呼叫時,將改寫入 BundleConfig 並輸出警告,不會拋出例外。

注意 主要供 CustomMode 使用——CustomMode 下 PatchLauncher Inspector 的 Preset 清單不生效,須以此方法手動配置,再呼叫 InitSetupPresetPackages 初始化。

範例

AssetPatcher.SetPresetPackages(
new List<AppPackageInfoWithBuild>()
{
new AppPackageInfoWithBuild() { packageName = "DefaultPackage" }
},
new List<DlcPackageInfoWithBuild>());

await AssetPatcher.InitSetupPresetPackages();

InitSetupPresetPackages

public static async UniTask InitSetupPresetPackages()

回傳值

UniTask — 可等待的非同步操作。

說明

初始化並設置所有 Preset Packages(App 與 DLC),完成後將清單首個 App Package 設為預設 Package,並更新 IsInitialized 狀態。

提醒 一般情況下 PatchLauncherAwake 會自動執行;僅在 CustomMode 或關閉 initializePresetPackages 選項時需手動呼叫。


Check

public static void Check()

說明

啟動補丁檢查流程:進行主程式版本比對、Package 版本與資源清單更新、建立主下載器並下載更新內容,流程各階段透過 PatchEvents 發送事件。

注意 若補丁檢查或修復流程正在執行中,重複呼叫將被忽略(輸出警告日誌)。

範例

// 啟動補丁流程
AssetPatcher.Check();

// 以輪詢(或訂閱 PatchEvents 事件)等待完成
while (!AssetPatcher.IsDone())
await UniTask.Yield();

Repair

public static void Repair()

說明

啟動修復流程:**清除本地的補丁快取資料與配置檔(清空下載目錄)**後,重新執行完整的補丁流程,可用於修復損毀或不完整的本地資源。

重要 修復會刪除已下載的本地資源,執行後需重新下載全部更新內容。


Pause

public static void Pause()

說明

暫停補丁流程主下載器的所有下載任務。未執行補丁流程(主下載器不存在)時呼叫無效果。


Resume

public static void Resume()

說明

恢復補丁流程主下載器的所有下載任務。


Cancel

public static void Cancel()

說明

取消主下載器的下載任務,發送下載取消事件(PatchEvents.PatchDownloadCanceled),並結束 Check/Repair 狀態。


版本與平台資訊

方法總覽

方法說明
GetPlatform取得目前的運行平台名稱。
GetAppVersion取得主程式版本號。
GetPatchVersion取得最新的資源(補丁)版本。

GetPlatform

public static string GetPlatform()

回傳值

string — 平台名稱;補丁流程尚未取得平台資訊時(如模擬模式),回傳 Application.platform.ToString()

說明

取得補丁配置中記錄的運行平台名稱(來自 AppConfig)。


GetAppVersion

public static string GetAppVersion()

回傳值

string — 主程式版本號;補丁流程尚未取得版本資訊時(如模擬模式),回傳 Application.version

說明

取得補丁配置中記錄的主程式版本號(來自 AppConfig)。


GetPatchVersion

public static string GetPatchVersion(bool encode = false, int length = 16, string separator = "-")
public static string GetPatchVersion(string[] customPatchVersions, bool encode = false, int length = 16, string separator = "-")

參數

參數型別說明
customPatchVersionsstring[]自訂版本清單。未指定時,使用 Preset Packages 記錄的資源版本。
encodebool是否輸出編碼後的版本字串(建議顯示用)。
預設值false
lengthint編碼字串長度(有效範圍 11~32)。
預設值16
separatorstring編碼字串的分隔符號。
預設值"-"

回傳值

string — 最新的資源版本字串;查無版本記錄時(如模擬模式),回傳以目前日期產生的版本。

說明

取得版本清單中最新的資源(補丁)版本。encode = true 時回傳編碼後的顯示用字串。

範例

// 原始版本字串
string version = AssetPatcher.GetPatchVersion();

// 編碼後的顯示版本
string display = AssetPatcher.GetPatchVersion(encode: true);

Package 管理

管理各 Package 的初始化、更新、查詢、預設切換與卸載。

方法總覽

初始化與更新

方法說明
InitPackage依資訊型別自動初始化 App 或 DLC Package。
InitAppPackage初始化 App Package。
InitDlcPackage初始化 DLC Package。
UpdatePackage更新指定 Package 的版本與資源清單。

預設 Package

方法說明
SetDefaultPackage設定預設 Package(未註冊時自動註冊)。
SwitchDefaultPackage在已註冊的 Package 間切換預設。
GetDefaultPackageName取得預設 Package 名稱。
GetDefaultPackage取得預設 Package 實例。

取得 Package

方法說明
GetPackage依名稱取得 Package。
GetPackages依名稱批次取得 Packages。
GetAllPackages取得所有已註冊的 Packages。
GetPresetAppPackages取得 Preset App Packages。
GetPresetDlcPackages取得 Preset DLC Packages。
GetPresetAppPackageInfos取得 Preset App Package 資訊清單。
GetPresetAppPackageNames取得 Preset App Package 名稱清單。
GetPresetDlcPackageInfos取得 Preset DLC Package 資訊清單。
GetPresetDlcPackageNames取得 Preset DLC Package 名稱清單。

本地檔案查詢與卸載

方法說明
CheckPackageHasAnyFilesInLocal檢查 Package 於本地 Sandbox 是否存在任何檔案。
GetPackageSizeInLocal取得 Package 於本地 Sandbox 的檔案總大小。
UnloadPackage從記憶體卸載(銷毀)Package。
UnloadPackageAndClearCacheFiles卸載 Package 並清除本地 Sandbox 的快取檔案。

InitPackage

public static async UniTask<bool> InitPackage(PackageInfoWithBuild packageInfo, bool updatePackage = false)

參數

參數型別說明
packageInfoPackageInfoWithBuildPackage 資訊(AppPackageInfoWithBuildDlcPackageInfoWithBuild)。
updatePackagebool初始化成功後,是否立即更新版本與資源清單。
預設值false

回傳值

UniTask<bool> — 初始化(含更新)是否成功;packageInfo 型別非 App/DLC 兩者之一時回傳 false

說明

packageInfo 的實際型別自動分流至 InitAppPackageInitDlcPackage


InitAppPackage

public static async UniTask<bool> InitAppPackage(AppPackageInfoWithBuild packageInfo, bool updatePackage = false)

參數

參數型別說明
packageInfoAppPackageInfoWithBuildApp Package 資訊(欄位參考 Package 概念)。
updatePackagebool初始化成功後,是否立即更新版本與資源清單。
預設值false

回傳值

UniTask<bool> — 初始化(含更新)是否成功。

說明

註冊並依目前 PlayMode 初始化 App Package。啟用 autoConfigureServerEndpoints(PlayMode 參數)時,將自動依配置組合資源伺服器與備用伺服器 URL(HostMode 類型使用)。

注意
  • Package 已初始化時不會重複初始化,僅依 updatePackage 決定是否執行更新。
  • 新版 YooAsset 需先取得版本與資源清單才能載入資源,因此啟動流程對 Preset Packages 一律以 updatePackage = true 初始化。

範例

bool success = await AssetPatcher.InitAppPackage(new AppPackageInfoWithBuild()
{
packageName = "OtherPackage"
}, updatePackage: true);

InitDlcPackage

public static async UniTask<bool> InitDlcPackage(DlcPackageInfoWithBuild packageInfo, bool updatePackage = false)

參數

參數型別說明
packageInfoDlcPackageInfoWithBuildDLC Package 資訊(含 dlcVersionwithoutPlatform,欄位參考 Package 概念)。
updatePackagebool初始化成功後,是否立即更新版本與資源清單。
預設值false

回傳值

UniTask<bool> — 初始化(含更新)是否成功。

說明

註冊並依目前 PlayMode 初始化 DLC Package。packageInfo.hostServerfallbackHostServer 有值時優先使用;否則於啟用 autoConfigureServerEndpoints 時,依 DLC 路徑規則(含 dlcVersionwithoutPlatform)自動組合 URL。

範例

// 初始化固定版本的 DLC Package
bool success = await AssetPatcher.InitDlcPackage(new DlcPackageInfoWithBuild()
{
packageName = "Dlc01Package",
dlcVersion = "v1.0"
}, updatePackage: true);

// dlcVersion 留空,自動使用最新(依日期)版本
await AssetPatcher.InitDlcPackage(new DlcPackageInfoWithBuild()
{
packageName = "Dlc02Package",
dlcVersion = null
}, updatePackage: true);

UpdatePackage

public static async UniTask<bool> UpdatePackage(string packageName)

參數

參數型別說明
packageNamestringPackage 名稱。

回傳值

UniTask<bool> — 版本請求與清單更新是否成功。

說明

向伺服器請求指定 Package 的最新版本並更新資源清單,成功後記錄本地版本。

提醒 弱聯網模式(啟用 enableLastLocalVersionsCheckInWeakNetwork)下版本請求失敗時,將改用上次記錄的本地版本更新清單,並驗證本地資源完整性(不完整時回傳 false,需連網更新)。


SetDefaultPackage

public static void SetDefaultPackage(string packageName)

參數

參數型別說明
packageNamestringPackage 名稱。

說明

將指定 Package 設為預設 Package;該 Package 尚未註冊時會自動註冊後設為預設。

注意 自動註冊不等於初始化——新註冊的 Package 仍需完成 InitPackage 流程後才能載入資源。


SwitchDefaultPackage

public static void SwitchDefaultPackage(string packageName)

參數

參數型別說明
packageNamestringPackage 名稱。

說明

已註冊的 Package 之間切換預設 Package。查無指定名稱時輸出錯誤日誌且不變更。

範例

// 切換至 DLC Package 作為預設
AssetPatcher.SwitchDefaultPackage("Dlc01Package");

// 之後 AssetLoaders 未指定 packageName 的載入都使用 Dlc01Package
var prefab = await AssetLoaders.LoadAssetAsync<GameObject>("DlcShopUI");

GetDefaultPackageName

public static string GetDefaultPackageName()

回傳值

string — 目前預設 Package 的名稱。

說明

取得目前載入資源時預設使用的 Package 名稱。


GetDefaultPackage

public static ResourcePackage GetDefaultPackage()

回傳值

ResourcePackage — 目前的預設 Package 實例(YooAsset)。

說明

取得預設 Package 實例,可搭配下載器系列方法使用。


GetPackage

public static ResourcePackage GetPackage(string packageName)

參數

參數型別說明
packageNamestringPackage 名稱。

回傳值

ResourcePackage — 名稱匹配的 Package;名稱為空或查無時回傳 null

說明

依名稱取得已註冊的 Package 實例。


GetPackages

public static ResourcePackage[] GetPackages(params string[] packageNames)

參數

參數型別說明
packageNamesstring[]Package 名稱清單(params)。

回傳值

ResourcePackage[] — 查詢到的 Packages(略過查無者);傳入空清單時回傳 null

說明

依名稱批次取得已註冊的 Package 實例。


GetAllPackages

public static ResourcePackage[] GetAllPackages()

回傳值

ResourcePackage[] — 所有已註冊的 Packages。

說明

取得目前所有已註冊的 Package 實例。


GetPresetAppPackages

public static ResourcePackage[] GetPresetAppPackages()

回傳值

ResourcePackage[] — Preset App Packages 實例陣列(略過尚未註冊者);清單為空時回傳空陣列。

說明

取得 PatchLauncher 配置的 Preset App Packages 實例。

範例

// 合併下載所有 Preset App Packages 的更新內容
var packages = AssetPatcher.GetPresetAppPackages();
bool succeed = await AssetPatcher.BeginDownloadWithCombinePackages(packages);

GetPresetDlcPackages

public static ResourcePackage[] GetPresetDlcPackages()

回傳值

ResourcePackage[] — Preset DLC Packages 實例陣列(略過尚未註冊者);清單為空時回傳空陣列。

說明

取得 PatchLauncher 配置的 Preset DLC Packages 實例。


GetPresetAppPackageInfos

public static PackageInfoWithBuild[] GetPresetAppPackageInfos()

回傳值

PackageInfoWithBuild[] — Preset App Packages 的資訊清單。

說明

取得 PatchLauncher 配置的 Preset App Package 資訊(名稱、建置管線等)。


GetPresetAppPackageNames

public static string[] GetPresetAppPackageNames()

回傳值

string[] — Preset App Packages 的名稱清單。

說明

取得 PatchLauncher 配置的 Preset App Package 名稱。


GetPresetDlcPackageInfos

public static DlcPackageInfoWithBuild[] GetPresetDlcPackageInfos()

回傳值

DlcPackageInfoWithBuild[] — Preset DLC Packages 的資訊清單。

說明

取得 PatchLauncher 配置的 Preset DLC Package 資訊(名稱、版本等)。


GetPresetDlcPackageNames

public static string[] GetPresetDlcPackageNames()

回傳值

string[] — Preset DLC Packages 的名稱清單。

說明

取得 PatchLauncher 配置的 Preset DLC Package 名稱。


CheckPackageHasAnyFilesInLocal

public static bool CheckPackageHasAnyFilesInLocal(string packageName)

參數

參數型別說明
packageNamestringPackage 名稱。

回傳值

bool — 該 Package 於本地 Sandbox 目錄是否存在任何檔案;查無 Package 或目錄不存在時回傳 false

說明

檢查 Package 是否已有下載至本地的檔案,可用於判斷 DLC 是否已下載。

提醒 EditorSimulateMode 下固定回傳 true


GetPackageSizeInLocal

public static ulong GetPackageSizeInLocal(string packageName)

參數

參數型別說明
packageNamestringPackage 名稱。

回傳值

ulong — 該 Package 於本地 Sandbox 的檔案總大小(位元組);查無 Package 或目錄不存在時回傳 0

說明

統計 Package 於本地 Sandbox 目錄的檔案總大小。

提醒 EditorSimulateMode 下固定回傳 1


UnloadPackage

public static async UniTask<bool> UnloadPackage(string packageName)

參數

參數型別說明
packageNamestringPackage 名稱。

回傳值

UniTask<bool> — 卸載是否成功;查無 Package 時視為已處理回傳 true

說明

從記憶體卸載(銷毀)Package 並移除註冊,不會刪除本地 Sandbox 的快取檔案。


UnloadPackageAndClearCacheFiles

public static async UniTask<bool> UnloadPackageAndClearCacheFiles(string packageName, bool destroyPackage = false)

參數

參數型別說明
packageNamestringPackage 名稱。
destroyPackagebool是否同時清除清單(Manifest)檔案,並將 Package 從記憶體銷毀移除。
預設值false

回傳值

UniTask<bool> — 清除(與卸載)是否成功;查無 Package 時視為已處理回傳 true

說明

清除 Package 於本地 Sandbox 的 Bundle 快取檔案;destroyPackage = true 時連同 Manifest 檔案一併清除,並將 Package 從記憶體銷毀。

重要 此操作會刪除本地已下載的資源檔案,通常用於移除不再需要的 DLC;清除後若要再次使用,需重新初始化並下載。

範例

// 徹底移除 DLC(清除檔案 + 從記憶體銷毀)
bool succeed = await AssetPatcher.UnloadPackageAndClearCacheFiles("Dlc01Package", true);

下載器

建立 YooAsset 下載器(ResourceDownloaderOperation),支援以 TagsAssetNamesAssetInfos 篩選下載內容,並可合併多個 Package 統一下載與顯示進度(適用「DLC + 主資源」一次更新的情境)。

下載進度回呼委派(DownloadSpeedCalculator.OnDownloadSpeedProgress):

public delegate void OnDownloadSpeedProgress(int totalDownloadCount, int currentDownloadCount, long totalDownloadBytes, long currentDownloadBytes, long downloadSpeedBytes)
參數型別說明
totalDownloadCountint待下載的檔案總數。
currentDownloadCountint已下載的檔案數。
totalDownloadByteslong待下載的總位元組數。
currentDownloadByteslong已下載的位元組數。
downloadSpeedByteslong目前下載速度(位元組/秒)。

提醒 maxConcurrencyDownloadCount(同時併發下載數)與 failedRetryCount(失敗重試次數)傳入 -1 時,使用 PatchLauncher 的全域設定(預設併發 10、重試 3)。

方法總覽

單一 Package 下載器

方法說明
GetPackageDownloader建立下載全部內容的下載器。
GetPackageDownloaderByTags建立依 Tags 篩選的下載器。
GetPackageDownloaderByAssetNames建立依資源名稱篩選的下載器。
GetPackageDownloaderByAssetInfos建立依 AssetInfo 篩選的下載器。

合併下載器取得

方法說明
GetDownloadersWithCombinePackages為多個 Packages 建立下載器陣列。
GetDownloadersWithCombinePackagesByTags依 Tags 為多個 Packages 建立下載器陣列。
GetDownloadersWithCombinePackagesByAssetNames依資源名稱為多個 Packages 建立下載器陣列。
GetDownloadersWithCombinePackagesByAssetInfosAssetInfo 為多個 Packages 建立下載器陣列。

合併下載

方法說明
BeginDownloadWithCombinePackages合併多個 Packages 開始下載。
BeginDownloadWithCombinePackagesByTags依 Tags 合併多個 Packages 開始下載。
BeginDownloadWithCombinePackagesByAssetNames依資源名稱合併多個 Packages 開始下載。
BeginDownloadWithCombinePackagesByAssetInfosAssetInfo 合併多個 Packages 開始下載。
BeginDownloadWithCombineDownloaders合併多個現成下載器開始下載。

下載資訊統計

方法說明
GetDownloadInfoWithCombinePackages統計多個 Packages 的待下載檔案數與大小。
GetDownloadInfoWithCombinePackagesByTags依 Tags 統計待下載檔案數與大小。
GetDownloadInfoWithCombinePackagesByAssetNames依資源名稱統計待下載檔案數與大小。
GetDownloadInfoWithCombinePackagesByAssetInfosAssetInfo 統計待下載檔案數與大小。

GetPackageDownloader

public static ResourceDownloaderOperation GetPackageDownloader(ResourcePackage package)
public static ResourceDownloaderOperation GetPackageDownloader(ResourcePackage package, int maxConcurrencyDownloadCount, int failedRetryCount)

參數

參數型別說明
packageResourcePackage目標 Package。
maxConcurrencyDownloadCountint同時併發下載數。-1 時使用全域設定。
failedRetryCountint下載失敗重試次數。-1 時使用全域設定。

回傳值

ResourceDownloaderOperation — 下載該 Package 全部更新內容的下載器(YooAsset)。

說明

建立指定 Package 的資源下載器,可透過下載器的 TotalDownloadCountTotalDownloadBytes 取得待下載統計,再自行控制下載開始時機。

範例

var package = AssetPatcher.GetPackage("Dlc01Package");
var downloader = AssetPatcher.GetPackageDownloader(package);

Debug.Log($"待下載檔案數: {downloader.TotalDownloadCount}, 大小: {downloader.TotalDownloadBytes} bytes");

GetPackageDownloaderByTags

public static ResourceDownloaderOperation GetPackageDownloaderByTags(ResourcePackage package, params string[] tags)
public static ResourceDownloaderOperation GetPackageDownloaderByTags(ResourcePackage package, int maxConcurrencyDownloadCount, int failedRetryCount, params string[] tags)

參數

參數型別說明
packageResourcePackage目標 Package。
maxConcurrencyDownloadCountint同時併發下載數。-1 時使用全域設定。
failedRetryCountint下載失敗重試次數。-1 時使用全域設定。
tagsstring[]資源群組 Tags(params)。空值或空陣列時,下載全部內容。

回傳值

ResourceDownloaderOperation — 依 Tags 篩選的下載器。

說明

建立僅下載指定 Tags 內容的下載器,適用於分批(分群)下載的情境。

範例

var package = AssetPatcher.GetDefaultPackage();
var downloader = AssetPatcher.GetPackageDownloaderByTags(package, "UI", "Battle");

GetPackageDownloaderByAssetNames

public static ResourceDownloaderOperation GetPackageDownloaderByAssetNames(ResourcePackage package, params string[] assetNames)
public static ResourceDownloaderOperation GetPackageDownloaderByAssetNames(ResourcePackage package, int maxConcurrencyDownloadCount, int failedRetryCount, params string[] assetNames)

參數

參數型別說明
packageResourcePackage目標 Package。
maxConcurrencyDownloadCountint同時併發下載數。-1 時使用全域設定。
failedRetryCountint下載失敗重試次數。-1 時使用全域設定。
assetNamesstring[]資源名稱清單(params)。空值或空陣列時,下載全部內容。

回傳值

ResourceDownloaderOperation — 依資源名稱篩選的下載器。

說明

建立僅下載指定資源名稱所屬 Bundle 的下載器,可精確更新特定資源。


GetPackageDownloaderByAssetInfos

public static ResourceDownloaderOperation GetPackageDownloaderByAssetInfos(ResourcePackage package, params AssetInfo[] assetInfos)
public static ResourceDownloaderOperation GetPackageDownloaderByAssetInfos(ResourcePackage package, int maxConcurrencyDownloadCount, int failedRetryCount, params AssetInfo[] assetInfos)

參數

參數型別說明
packageResourcePackage目標 Package。
maxConcurrencyDownloadCountint同時併發下載數。-1 時使用全域設定。
failedRetryCountint下載失敗重試次數。-1 時使用全域設定。
assetInfosAssetInfo[]YooAsset AssetInfo 清單(params)。空值或空陣列時,下載全部內容。

回傳值

ResourceDownloaderOperation — 依 AssetInfo 篩選的下載器。

說明

建立僅下載指定 AssetInfo 所屬 Bundle 的下載器。


GetDownloadersWithCombinePackages

public static ResourceDownloaderOperation[] GetDownloadersWithCombinePackages(ResourcePackage[] packages)
public static ResourceDownloaderOperation[] GetDownloadersWithCombinePackages(ResourcePackage[] packages, int maxConcurrencyDownloadCount, int failedRetryCount)

參數

參數型別說明
packagesResourcePackage[]目標 Packages。
maxConcurrencyDownloadCountint同時併發下載數。-1 時使用全域設定。
failedRetryCountint下載失敗重試次數。-1 時使用全域設定。

回傳值

ResourceDownloaderOperation[] — 每個 Package 對應一個下載器的陣列。

說明

為多個 Packages 分別建立下載器,可搭配 BeginDownloadWithCombineDownloaders 合併下載。


GetDownloadersWithCombinePackagesByTags

public static ResourceDownloaderOperation[] GetDownloadersWithCombinePackagesByTags(ResourcePackage[] packages, params string[] tags)
public static ResourceDownloaderOperation[] GetDownloadersWithCombinePackagesByTags(ResourcePackage[] packages, int maxConcurrencyDownloadCount, int failedRetryCount, params string[] tags)

參數

參數型別說明
packagesResourcePackage[]目標 Packages。
maxConcurrencyDownloadCountint同時併發下載數。-1 時使用全域設定。
failedRetryCountint下載失敗重試次數。-1 時使用全域設定。
tagsstring[]資源群組 Tags(params)。空值或空陣列時,下載全部內容。

回傳值

ResourceDownloaderOperation[] — 依 Tags 篩選的下載器陣列。

說明

依 Tags 為多個 Packages 分別建立下載器。


GetDownloadersWithCombinePackagesByAssetNames

public static ResourceDownloaderOperation[] GetDownloadersWithCombinePackagesByAssetNames(ResourcePackage[] packages, params string[] assetNames)
public static ResourceDownloaderOperation[] GetDownloadersWithCombinePackagesByAssetNames(ResourcePackage[] packages, int maxConcurrencyDownloadCount, int failedRetryCount, params string[] assetNames)

參數

參數型別說明
packagesResourcePackage[]目標 Packages。
maxConcurrencyDownloadCountint同時併發下載數。-1 時使用全域設定。
failedRetryCountint下載失敗重試次數。-1 時使用全域設定。
assetNamesstring[]資源名稱清單(params)。空值或空陣列時,下載全部內容。

回傳值

ResourceDownloaderOperation[] — 依資源名稱篩選的下載器陣列。

說明

依資源名稱為多個 Packages 分別建立下載器。


GetDownloadersWithCombinePackagesByAssetInfos

public static ResourceDownloaderOperation[] GetDownloadersWithCombinePackagesByAssetInfos(ResourcePackage[] packages, params AssetInfo[] assetInfos)
public static ResourceDownloaderOperation[] GetDownloadersWithCombinePackagesByAssetInfos(ResourcePackage[] packages, int maxConcurrencyDownloadCount, int failedRetryCount, params AssetInfo[] assetInfos)

參數

參數型別說明
packagesResourcePackage[]目標 Packages。
maxConcurrencyDownloadCountint同時併發下載數。-1 時使用全域設定。
failedRetryCountint下載失敗重試次數。-1 時使用全域設定。
assetInfosAssetInfo[]YooAsset AssetInfo 清單(params)。空值或空陣列時,下載全部內容。

回傳值

ResourceDownloaderOperation[] — 依 AssetInfo 篩選的下載器陣列。

說明

AssetInfo 為多個 Packages 分別建立下載器。


BeginDownloadWithCombinePackages

public static async UniTask<bool> BeginDownloadWithCombinePackages(ResourcePackage[] packages, OnDownloadSpeedProgress onDownloadSpeedProgress = null, DownloadError onDownloadError = null)
public static async UniTask<bool> BeginDownloadWithCombinePackages(ResourcePackage[] packages, int maxConcurrencyDownloadCount, int failedRetryCount, OnDownloadSpeedProgress onDownloadSpeedProgress = null, DownloadError onDownloadError = null)

參數

參數型別說明
packagesResourcePackage[]目標 Packages。
maxConcurrencyDownloadCountint同時併發下載數。-1 時使用全域設定。
failedRetryCountint下載失敗重試次數。-1 時使用全域設定。
onDownloadSpeedProgressOnDownloadSpeedProgress合併進度回呼(含下載速度)。
預設值null
onDownloadErrorDownloaderOperation.DownloadError下載失敗回呼(YooAsset)。
預設值null

回傳值

UniTask<bool> — 全部下載是否成功;任一下載器失敗時回傳 false,無待下載內容時回傳 true

說明

合併多個 Packages 的更新內容依序下載,並以合併後的總數統計進度(統一在單一進度條顯示)。適用於「DLC + 主資源」一次更新的情境。

範例

var packages = AssetPatcher.GetPresetAppPackages();

bool succeed = await AssetPatcher.BeginDownloadWithCombinePackages(
packages,
onDownloadSpeedProgress: (totalCount, currentCount, totalBytes, currentBytes, speedBytes) =>
{
// 更新下載進度 UI(含下載速度)
Debug.Log($"進度: {currentCount}/{totalCount}, 速度: {speedBytes} bytes/s");
},
onDownloadError: (errorData) =>
{
// 下載失敗處理
});

BeginDownloadWithCombinePackagesByTags

public static async UniTask<bool> BeginDownloadWithCombinePackagesByTags(ResourcePackage[] packages, string[] tags = null, OnDownloadSpeedProgress onDownloadSpeedProgress = null, DownloadError onDownloadError = null)
public static async UniTask<bool> BeginDownloadWithCombinePackagesByTags(ResourcePackage[] packages, int maxConcurrencyDownloadCount, int failedRetryCount, string[] tags = null, OnDownloadSpeedProgress onDownloadSpeedProgress = null, DownloadError onDownloadError = null)

參數

參數型別說明
packagesResourcePackage[]目標 Packages。
maxConcurrencyDownloadCountint同時併發下載數。-1 時使用全域設定。
failedRetryCountint下載失敗重試次數。-1 時使用全域設定。
tagsstring[]資源群組 Tags。空值時下載全部內容。
預設值null
onDownloadSpeedProgressOnDownloadSpeedProgress合併進度回呼。
預設值null
onDownloadErrorDownloaderOperation.DownloadError下載失敗回呼。
預設值null

回傳值

UniTask<bool> — 全部下載是否成功。

說明

依 Tags 篩選後合併多個 Packages 開始下載,其餘行為同 BeginDownloadWithCombinePackages


BeginDownloadWithCombinePackagesByAssetNames

public static async UniTask<bool> BeginDownloadWithCombinePackagesByAssetNames(ResourcePackage[] packages, string[] assetNames = null, OnDownloadSpeedProgress onDownloadSpeedProgress = null, DownloadError onDownloadError = null)
public static async UniTask<bool> BeginDownloadWithCombinePackagesByAssetNames(ResourcePackage[] packages, int maxConcurrencyDownloadCount, int failedRetryCount, string[] assetNames = null, OnDownloadSpeedProgress onDownloadSpeedProgress = null, DownloadError onDownloadError = null)

參數

參數型別說明
packagesResourcePackage[]目標 Packages。
maxConcurrencyDownloadCountint同時併發下載數。-1 時使用全域設定。
failedRetryCountint下載失敗重試次數。-1 時使用全域設定。
assetNamesstring[]資源名稱清單。空值時下載全部內容。
預設值null
onDownloadSpeedProgressOnDownloadSpeedProgress合併進度回呼。
預設值null
onDownloadErrorDownloaderOperation.DownloadError下載失敗回呼。
預設值null

回傳值

UniTask<bool> — 全部下載是否成功。

說明

依資源名稱篩選後合併多個 Packages 開始下載,其餘行為同 BeginDownloadWithCombinePackages


BeginDownloadWithCombinePackagesByAssetInfos

public static async UniTask<bool> BeginDownloadWithCombinePackagesByAssetInfos(ResourcePackage[] packages, AssetInfo[] assetInfos = null, OnDownloadSpeedProgress onDownloadSpeedProgress = null, DownloadError onDownloadError = null)
public static async UniTask<bool> BeginDownloadWithCombinePackagesByAssetInfos(ResourcePackage[] packages, int maxConcurrencyDownloadCount, int failedRetryCount, AssetInfo[] assetInfos = null, OnDownloadSpeedProgress onDownloadSpeedProgress = null, DownloadError onDownloadError = null)

參數

參數型別說明
packagesResourcePackage[]目標 Packages。
maxConcurrencyDownloadCountint同時併發下載數。-1 時使用全域設定。
failedRetryCountint下載失敗重試次數。-1 時使用全域設定。
assetInfosAssetInfo[]YooAsset AssetInfo 清單。空值時下載全部內容。
預設值null
onDownloadSpeedProgressOnDownloadSpeedProgress合併進度回呼。
預設值null
onDownloadErrorDownloaderOperation.DownloadError下載失敗回呼。
預設值null

回傳值

UniTask<bool> — 全部下載是否成功。

說明

AssetInfo 篩選後合併多個 Packages 開始下載,其餘行為同 BeginDownloadWithCombinePackages


BeginDownloadWithCombineDownloaders

public static async UniTask<bool> BeginDownloadWithCombineDownloaders(ResourceDownloaderOperation[] downloaders, OnDownloadSpeedProgress onDownloadSpeedProgress = null, DownloadError onDownloadError = null)

參數

參數型別說明
downloadersResourceDownloaderOperation[]現成的下載器陣列(可混合不同建立方式)。
onDownloadSpeedProgressOnDownloadSpeedProgress合併進度回呼。
預設值null
onDownloadErrorDownloaderOperation.DownloadError下載失敗回呼。
預設值null

回傳值

UniTask<bool> — 全部下載是否成功;任一下載器失敗時回傳 false,無待下載內容時回傳 true

說明

合併多個現成下載器依序下載並統一統計進度,是各 BeginDownloadWithCombinePackages 系列方法的底層實作,適合自行組合不同篩選條件的下載器後一次下載。


GetDownloadInfoWithCombinePackages

public static DownloadInfo GetDownloadInfoWithCombinePackages(ResourcePackage[] packages)

參數

參數型別說明
packagesResourcePackage[]目標 Packages。

回傳值

DownloadInfo — 合併統計的待下載檔案總數與總位元組數(參考 DownloadInfo 結構)。

說明

統計多個 Packages 的待下載內容,可於下載前顯示「需要下載 N 個檔案(共 M bytes)」的確認資訊。

範例

var packages = AssetPatcher.GetPresetAppPackages();
var info = AssetPatcher.GetDownloadInfoWithCombinePackages(packages);

Debug.Log($"待下載檔案數: {info.totalCount}, 總大小: {info.totalBytes} bytes");

GetDownloadInfoWithCombinePackagesByTags

public static DownloadInfo GetDownloadInfoWithCombinePackagesByTags(ResourcePackage[] packages, params string[] tags)

參數

參數型別說明
packagesResourcePackage[]目標 Packages。
tagsstring[]資源群組 Tags(params)。空值或空陣列時,統計全部內容。

回傳值

DownloadInfo — 合併統計的待下載檔案總數與總位元組數。

說明

依 Tags 篩選統計多個 Packages 的待下載內容。


GetDownloadInfoWithCombinePackagesByAssetNames

public static DownloadInfo GetDownloadInfoWithCombinePackagesByAssetNames(ResourcePackage[] packages, params string[] assetNames)

參數

參數型別說明
packagesResourcePackage[]目標 Packages。
assetNamesstring[]資源名稱清單(params)。空值或空陣列時,統計全部內容。

回傳值

DownloadInfo — 合併統計的待下載檔案總數與總位元組數。

說明

依資源名稱篩選統計多個 Packages 的待下載內容。


GetDownloadInfoWithCombinePackagesByAssetInfos

public static DownloadInfo GetDownloadInfoWithCombinePackagesByAssetInfos(ResourcePackage[] packages, params AssetInfo[] assetInfos)

參數

參數型別說明
packagesResourcePackage[]目標 Packages。
assetInfosAssetInfo[]YooAsset AssetInfo 清單(params)。空值或空陣列時,統計全部內容。

回傳值

DownloadInfo — 合併統計的待下載檔案總數與總位元組數。

說明

AssetInfo 篩選統計多個 Packages 的待下載內容。


路徑與工具

本地與內建資源路徑、商店連結、群組記錄與解密服務等輔助方法。

方法總覽

路徑查詢

方法說明
GetLocalSandboxRootPath取得本地持久化儲存根目錄。
GetLocalSandboxPackagePath取得指定 Package 的本地持久化路徑。
GetBuiltinRootPath取得內建資源根目錄。
GetBuiltinPackagePath取得指定 Package 的內建資源路徑。
GetRequestStreamingAssetsPath取得適用於 UnityWebRequest 的 StreamingAssets 路徑。

商店與其他

方法說明
GetAppStoreLink取得主程式商店連結。
GoToAppStore開啟系統瀏覽器前往商店。
GetDefaultGroupTag取得預設群組 Tag(#all)。
ClearLastGroupInfo清除上次選擇的群組記錄。
GetBundleDecryptionServices取得 Bundle 解密服務。
GetManifestDecryptionServices取得 Manifest 解密服務。

GetLocalSandboxRootPath

public static string GetLocalSandboxRootPath()

回傳值

string — 本地持久化儲存根目錄(YooAsset 預設快取根目錄,.../yoo)。

說明

取得下載資源的本地儲存(Sandbox)根目錄。


GetLocalSandboxPackagePath

public static string GetLocalSandboxPackagePath(string packageName)

參數

參數型別說明
packageNamestringPackage 名稱。

回傳值

string — 該 Package 的本地持久化路徑(.../yoo/<PackageName>)。

說明

取得指定 Package 下載資源的本地儲存路徑。


GetBuiltinRootPath

public static string GetBuiltinRootPath()

回傳值

string — 內建資源根目錄(.../StreamingAssets/yoo)。

說明

取得隨包內建資源的根目錄。


GetBuiltinPackagePath

public static string GetBuiltinPackagePath(string packageName)

參數

參數型別說明
packageNamestringPackage 名稱。

回傳值

string — 該 Package 的內建資源路徑(.../StreamingAssets/yoo/<PackageName>)。

說明

取得指定 Package 的隨包內建資源路徑。


GetRequestStreamingAssetsPath

public static string GetRequestStreamingAssetsPath()

回傳值

string — 適用於 UnityWebRequest 的 StreamingAssets 路徑(macOS/iOS 平台自動加上 file:// 前綴)。

說明

取得跨平台可用於網路請求的 StreamingAssets 路徑。


public static async UniTask<string> GetAppStoreLink()

回傳值

UniTask<string> — 配置檔中的商店連結(STORE_LINK)。

說明

從 Bundle URL 配置檔(burlcfg)讀取主程式商店連結,用於主程式版本過舊時引導更新。


GoToAppStore

public static void GoToAppStore()

說明

讀取商店連結並以 Application.OpenURL 開啟系統瀏覽器前往商店(更新主程式本體)。


GetDefaultGroupTag

public static string GetDefaultGroupTag()

回傳值

string — 預設群組 Tag(#all)。

說明

取得補丁群組(分包群組)的預設 Tag,代表全部內容。


ClearLastGroupInfo

public static void ClearLastGroupInfo()

說明

清除本地儲存的「上次選擇的群組(GroupInfo)」記錄。補丁流程會記住玩家上次選擇下載的資源群組,透過此方法可重置該記錄。


GetBundleDecryptionServices

public static DecryptionServices GetBundleDecryptionServices()

回傳值

DecryptionServices — 目前配置的 Bundle 解密服務;未加密(NONE)時回傳 null

說明

取得依 PatchLauncher 加密設定初始化的 Bundle 解密服務(YooAsset)。


GetManifestDecryptionServices

public static DecryptionServices GetManifestDecryptionServices()

回傳值

DecryptionServices — 目前配置的 Manifest 解密服務;未加密(NONE)時回傳 null

說明

取得依 PatchLauncher 加密設定初始化的 Manifest(資源清單)解密服務(YooAsset)。


釋放

Release

public async static UniTask Release()

回傳值

UniTask — 可等待的非同步操作。

說明

釋放整個資源系統:銷毀並移除所有 Package、銷毀 YooAssets,並清空 Bundle 相關的全域配置,確保記憶體正確回收。

重要 應於遊戲準備關閉時呼叫。釋放後 IsReleasedtrueAssetLoaders 的 Bundle 卸載相關操作將被跳過,資源系統無法再使用。

範例

private async void OnApplicationQuit()
{
await AssetPatcher.Release();
}