加載方式
Coding Style wiki
通過 Resources 加載
提醒 使用 Resources 加載時,不需要進行額外配置,僅將資源放在 Resources 下,並且直接使用 res# 作為前墜 + 資源路徑進行加載。

重要 使用 res# 作為前墜時,將會切換成 Resources 加載方式。
// res# prefix
AssetLoaders.LoadAssetAsync<GameObject>("res#MyPrefabs/Cube");
通過 AssetBundle 加載
步驟 1.
必須先通過 YooAsset Collector 配置。
注意 尋址名稱需要注意,圖中的 DefaultPackage 包含尋址名稱的有 Cube。

步驟 2.
另外使用 AssestBundle 進行開發時,也需要 PatchLauncher 進行 Runtime 配置,主要是使用 AssetBundle 加載時,需要初始相關設置。

注意 匯入後拖曳到 Hierarchy 窗體。

步驟 3.
配 置 Preset Packages,將會在 Runtime 時進行初始。
- Preset App Packages。
- 提醒 第一個元素將是「預設包裹 (Default Package)」。
- Preset DLC Packages。

重要 Preset Packages 將由主下載器進行管理與檢查,所以不包含在 Preset 中的 Packages,必須自行通過 API 初始,說明如下。
手動初始 App Package
// [Load asset and download from specific package (Export App Bundles for CDN)]
AppPackageInfoWithBuild packageInfo = new AppPackageInfoWithBuild()
{
buildMode = BundleConfig.BuildMode.ScriptableBuildPipeline,
packageName = "OtherPackage"
};
// updatePackage = true (Will update the Manifest)
bool isInitialized = await AssetPatcher.InitAppPackage(packageInfo, true);
if (isInitialized)
await AssetLoaders.LoadAssetAsync<GameObject>("OtherPackage", "assetName");
手動初始 DLC Package
// [Load asset and download from specific package (Export Individual DLC Bundles for CDN)]
DlcPackageInfoWithBuild packageInfo = new DlcPackageInfoWithBuild()
{
buildMode = BundleConfig.BuildMode.ScriptableBuildPipeline,
packageName = "DlcPackage",
dlcVersion = "dlcVersion",
withoutPlatform = false
};
// updatePackage = true (Will update the Manifest)
bool isInitialized = await AssetPatcher.InitDlcPackage(packageInfo, true);
if (isInitialized)
await AssetLoaders.LoadAssetAsync<GameObject>("DlcPackage", "assetName");
注意 區分 App Packages 跟 DLC Packages,注意路徑不同。
- App Packages
- 路徑隨著主程式版號 (.../CDN/<ProductName>/<Platform>/<AppVersion>/<PackageName>)。
- 手動進行 AssetPatcher.InitAppPackage 的初始 (如果 updatePackage = false,則需要自行另外調用 AssetPatcher.UpdatePackage 進行 Manifest 的更新)。
- DLC Packages
- 路徑包含平台 (.../CDN/<ProductName>/<Platform>/DLC/<PackageName>/<DlcVersion>)。
- 路徑不含平台 (.../CDN/<ProductName>/DLC/<PackageName>/<DlcVersion>),屬於所有平台的共用資源。
- 支持特定版本 DLC package 的下載與 DLC package 卸載功能,需手動進行 AssetPatcher.InitDlcPackage,並且指定特定 dlcVersion,對於 dlcVersion 也可以單一固定 dlcVersion (ex: "latest"),變成只要 DLC 有更新就可以使用固定路徑進行更新。
API 參考:
/// <summary>
/// Init app package (If PlayMode is HostMode will request from default host path)
/// </summary>
/// <param name="packageInfo"></param>
/// <param name="updatePackage"></param>
/// <returns></returns>
public static async UniTask<bool> InitAppPackage(AppPackageInfoWithBuild packageInfo, bool updatePackage = false)
/// <summary>
/// Init dlc package (If PlayMode is HostMode will request from default host dlc path)
/// </summary>
/// <param name="packageInfo"></param>
/// <param name="updatePackage"></param>
/// <returns></returns>
public static async UniTask<bool> InitDlcPackage(DlcPackageInfoWithBuild packageInfo, bool updatePackage = false)
/// <summary>
/// Update package version and manifest by package name
/// </summary>
/// <param name="packageName"></param>
/// <returns></returns>
public static async UniTask<bool> UpdatePackage(string packageName)
注意 另外,PlayMode 的說明如下。
- Editor Simulate Mode (開發模式)。
- Offline Mode (離線模式)。
- Host Mode (聯機模式)。
- Weak Host Mode (弱聯機模式)。
- WebGL Mode (WebGL 模式 - 請求 StreamingAssets)。
- WebGL Remote Mode (WebGL 聯機模式 - 請求 StreamingAssets 和其他 CDNs)。
- Custom Mode (自定義模式 - 針對 mini-games)。
重要 打包可用的宏定義
步驟 4.
前作業完成後,輪詢初始狀態 AssetPatcher.IsInitialized() == true,就可以開始載入內置資源了,如以下。
從 DefaultPackage 載入尋址名稱為 Cube 的物件。
private IEnumerator Start()
{
// Wait Until IsInitialized
while (!AssetPatcher.IsInitialized())
yield return null;
// Load asset with assign a package (from Built-in)
AssetLoaders.LoadAssetAsync<GameObject>("DefaultPackage", "Cube");
}
重要 詳細更新流程,建議參考 BundleDemo (從 Package Manager 匯入)。
注意 額外補充,流程先後順序,說明如下。
- 輪詢初始狀態 AssetPatcher.IsInitialized() == true -> 即可加載內置資源與執行檢查更新。
- 執行檢查更新 AssetPatcher.Check() -> 輪詢完成狀態 AssetPatcher.IsDone() == true -> 完成更新後 -> 即可加載更新資源。