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