加載方式
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 -> 完成更新後 -> 即可加載更新資源。