注意:Unity 的 Addressables 系统 是推荐的资产加载方法。以下内容仅适用于直接使用 AssetBundles 的情况。
由于所有资产数据必须在内容启动之前预下载,请考虑将资产从主数据文件移至 AssetBundles。这样做可以创建一个更小的加载器 场景场景包含游戏的环境和菜单。将每个唯一的场景文件视为一个独特的关卡。在每个场景中,您放置环境、障碍物和装饰,本质上是分块设计和构建游戏。 更多信息
参见 术语表,该加载器加载速度很快,而 AssetBundles 会根据用户在内容中前进的情况动态加载所需资产。AssetBundles 还帮助进行 资产数据内存 管理:您可以通过调用 AssetBundle.Unload,从内存中卸载不再需要的资产数据。
以下注意事项适用于在 Web 平台上使用 AssetBundles
当您在 AssetBundle 中使用主构建中未使用的类类型时,Unity 可能会从构建中剥离这些类的代码。这会导致尝试从 AssetBundle 加载资产时失败。使用 BuildPlayerOptions.assetBundleManifestPath 来修复此问题,并参考 发布大小和代码剥离 获取其他选项。
该 WebGL一个 JavaScript API,用于在 Web 浏览器中渲染 2D 和 3D 图形。Unity Web 构建选项允许 Unity 将内容发布为 JavaScript 程序,这些程序使用 HTML5 技术和 WebGL 渲染 API 在 Web 浏览器中运行 Unity 内容。 更多信息
参见 术语表 图形 API 不支持线程。由于 HTTP 下载仅在下载完成后才可用,因此 Unity Web 平台构建需要在下载完成后在主线程上解压缩 AssetBundle 数据,从而阻塞主线程。为了避免这种中断,LZMA AssetBundle 压缩 在 Web 上的 AssetBundles 中不可用。AssetBundles 使用 LZ4 进行压缩,该压缩方法可以高效地在需要时解压缩。如果您需要比 LZ4 提供的更小的 压缩一种存储数据的 方法,可以减少其所需的存储空间。请参阅 纹理压缩、动画压缩、音频压缩、构建压缩。
参见 术语表 尺寸,请将您的 Web 服务器配置为对您的 AssetBundles 使用 gzip 或 Brotli 压缩(在 LZ4 压缩之上)。有关如何执行此操作的更多信息,请参考 部署压缩构建。
Web 平台不支持使用 UnityWebRequestAssetBundle.GetAssetBundle 进行基于文件系统的 AssetBundle 缓存。相反,浏览器会缓存 WebRequest 响应;有关详细信息,请参考 Web 中的缓存行为。这意味着在 AssetBundle 加载时,整个 AssetBundle 文件将保存在内存中,您必须及时卸载未使用的 AssetBundles,尤其是在它们很大时。