跳至主要内容
版本:v3

加載方式

重要 注意 提醒

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