跳到主要内容
版本: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 -> 完成更新后 -> 即可加载更新资源