接入指南 API 工具 其他

Unity WebGL 资源按需加载指南

一、使用 Addressable 资源管理系统

Unity WebGL 转换成快游戏时,首包资源大小对启动耗时影响极大,推荐按需加载资源以提升运行效率和流畅性。

优化原则

  • 首包资源越小越好,建议不超过 5MB
  • 不再使用的资源必须释放(Unload

Addressables 介绍

Addressables 基于 AssetBundle,提供了更方便的资源管理,包括打包、加载、释放与热更新等操作,大大简化了对原生 AssetBundle 的操作。

资源打包

当使用 Addressables 并将项目打包为 WebGL 时,将生成 StreamingAssets 目录,包括 bundle 资源和 catalog/settings 配置文件:

└── StreamingAssets
    ├── catalog.json
    ├── settings.json
    └── WebGL
        └── *.bundle

配置网络资源地址

需将整个 StreamingAssets 目录上传到服务器,并在 env.conf 文件中配置:

{
  "wasmUrl": "https://vassets.vvstc.com/vassets/og2pg/o/webdemotest.zip",
  "streamingAssetsUrl": "http://localhost:8080/StreamingAssets" //代表 StreamingAssets 文件夹的网络资源地址。
}

二、使用 AssetBundle 进行按需加载

快游戏环境不支持 AssetBundle 本地加载,需使用网络方式。

打包工具

已提供实用的打包工具,代码位于 QGGameTools.AssetBundleBuild,支持修改打包路径与参数。

建议打包参数

  • BuildAssetBundleOptions.AppendHashToAssetBundleName
  • BuildAssetBundleOptions.ChunkBasedCompression (推荐使用 LZ4 压缩方式,加载速度和包体大小更均衡。)
  • BuildAssetBundleOptions.DisableWriteTypeTree
public static void AssetBundleBuild()
{
    string dst = Application.streamingAssetsPath + "/AssetBundles";
    if (!Directory.Exists(dst))
    {
        Directory.CreateDirectory(dst);
    }
    BuildPipeline.BuildAssetBundles(dst,
        BuildAssetBundleOptions.AppendHashToAssetBundleName |
        BuildAssetBundleOptions.ChunkBasedCompression |
        BuildAssetBundleOptions.DisableWriteTypeTree,
        BuildTarget.WebGL);
}

资源加载

推荐使用 UnityWebRequestAssetBundle

UnityWebRequest request = UnityWebRequestAssetBundle.GetAssetBundle("http://xxxxx/AssetBundles/asset1.bundle");
yield return request.SendWebRequest();
if (request.result != UnityWebRequest.Result.Success) {
    Debug.LogError(request.error);
} else {
    AssetBundle ab = DownloadHandlerAssetBundle.GetContent(request);
    // 后续进行资源加载
}

总结

  • 使用 Addressables 和 AssetBundle 都可以实现按需加载,前者为高级 API,体验更好
  • 实时释放资源,降低内存占用
  • 同时搭配 CDN 进行资源远程部署,最大限度降低首包加载耗时

条匹配 "" 的结果

    没有搜索到与 "" 相关的内容