Version: 1.4
语言 : 中文
AutoStreaming
资源搜索和引用标签

AutoStreaming 用法

在游戏开发中,资源管理是至关重要的一环。通常,游戏中的资源占据了大部分的空间,而且在游戏启动时,只有少数资源是立即需要的。为了解决这一问题,我们引入了 AutoStreaming 技术,它能够自动按需加载资源,带来以下优势:

  • 降低开发成本:通过引擎底层支持按需加载,减少从原生应用转换小游戏时的代码逻辑修改工作量。
  • 快速启动:减小小游戏的首包大小,从而加快游戏的启动速度。
  • 减少内存占用:避免加载未使用的资源,从而减少小游戏的内存占用。

AutoStreaming 支持多种资源类型,并通过小游戏平台提供的 UI 工具轻松配置资源的 Streaming 选项:

纹理(Texture)

我们采用低分辨率或低信息量的图片作为游戏首包内的原始贴图的替代品。游戏启动时,首先加载这些轻量级的贴图,以快速启动游戏。当游戏首次使用到某个纹理资源时,引擎会在后台从 UOS CDN 下载原始贴图,并在下载完成后自动替换。

我们称这种轻量级的图片为 Placeholder,目前提供以下几种类型:

类型 原图 Placeholder 说明
缩略图 默认类型,适用于大多数情况
透明图 用于UI可不显示模糊状态
模糊图 需要维持原分辨率时使用

Placeholder 默认类型为缩略图,大小为 32x32 。 可以在 AutoStreaming -> Texture Streaming 页面查看每个 texture 当前的 placeholder 类型。 可在原图 Inspector 窗口修改,其中缩略图类型支持从 32 - 1024 的大小调整。

首次打包操作流程

  1. 点击 convertLegacySpritePacker(可选);
  2. 点击 Sync Texture 搜索所有 Texture 资源, Ctrl + A 选中所有图片,再勾选 OnDemandDownload
  3. 点击 Generate AssetBundles ,为所有勾选的 texture 生成 AB,每张贴图一个 AB;
  4. 点击表头按生成的AB大小排序,取消勾选 AB 过小的图片(例如小5KB,可按住Shift多选);
  5. 再次点击 Generate AssetBundles ,清理不需要的AB ;
  6. 最后点击 Generate Placeholders

更新操作流程

  1. 点击 Sync Texture
  2. 调整 OnDemandDownload 的勾选;
  3. 点击 Generate AssetBundles 重新生成AB ;
  4. 点击 Generate Placeholders

最新版本团结已支持增量打包,能够显著提高打包效率。如果需要也可以勾选 Force Rebuild ,强制全部重新打包。

图集(SpriteAtlas)

图集通过将多张小贴图合并成一张大贴图来减少 DrawCall,提升性能。

图集的 Streaming 配置与纹理资源类似,也在 Texture Streaming 页面设置,但我们使用图集的 Variant 作为 Placeholder,通过调整 Variant 的 Scale 来缩小尺寸。 在 Variant 图集的 Inspector 窗口勾选 Transparent 选项,可以使用透明贴图。

原图集 缩略图集 Placeholder 透明图集 Placeholder

Audio/Mesh/Animation/Font

Audio,Mesh,Animation 和 Font 的 Streaming 处理与 Texture / SpriteAtlas 不同。

我们保留了这几类资源的对象,仅将资源内的数据从 游戏首包 / AB 中抽离出来,部署到 UOS CDN 服务器上。当游戏首次使用到该 Audio / Mesh 资源时,将触发引擎后台线程下载资源数据,完成后自动加载到原资源对象中使用。

由于资源数据的抽取发生在打包 AB 或小游戏时,并且自动生成,因此不需要像 Scene / Texture 一样主动点一次打包 AB 。

Scenes

选择 BuildSettings 中的场景打包成 AssetBundle ,并部署到 UOS CDN 服务器上。

开发者像往常一样通过 SceneManager 调用 LoadScene 或 LoadSceneAsync。底层将自动触发下载,完成后自动加载场景。

支持通过 scene name 和 Index 的加载。

  • 使用流程: 点击 Sync Scenes → 选择需要 Streaming 的场景 → 点击 Sync SharedAssets → 勾选 SharedAssets 资源 → 如果已经生成过场景AB,勾选 Force Rebuild → 点击左上角的 Generate ABs

问题:将每个场景单独打包成一个 AssetBundle 可能会导致被多个场景引用的资源被重复打包,从而增加场景 AssetBundle 的总量,浪费下载时间和 CDN 流量。

解决方案:将这些共享资源打包进一个单独的共享 AB 中,使得场景 AB 依赖于这个共享 AB,从而避免资源冗余。

共享AB的注意事项:由于共享 AB(下图选中文件)需要在首场景前准备好,因而不宜过大(小于3MB),我们建议仅勾选对场景 AB 总量影响严重的资源,如:

  • 被大多数场景引用到的资源(References 中包含场景序号较多的资源)

  • 本身较大的 shader 等资源

FBX文件中可能包含模型材质等诸多资源,而场景引用的仅是其中的一个或少数几个,因此不推荐勾选FBX文件,避免共享AB过大。

AutoStreaming 资源文件

所有 AutoStreaming 生成的资源文件都以 .abas 为后缀,并且存放在 Library\AutoStreamingCache 目录下。在 Window -> AutoStreaming -> Cfg&Publish 页面右侧,提供了对所有 AutoStreaming 资源文件大小的统计信息。

AutoStreaming 资源文件有以下两种类型:

文件类型 资源类型 文件名 上传附加hash
AssetBundle 文件 Scene、Texture、SpriteAtlas 资源 guid
二进制文件 Audio,Mesh,Animation,Font 文件 hash

其中 AssetBundle 文件类型在上传到 UOS CDN 时,会计算 hash ,并附加在文件名后,因此实际访问这些资源文件时的 URL 为:

{ Cfg & Publish 页面可复制的 Auto Streaming Path } + “/AS/” + {guid} + “_” + {hash} +“.abas”

反向查找原资源

AutoStreaming 资源文件可通过同目录下,与其同名的 *.abas.info*.abas.manifest 文件查看对应的原始资源。

AutoStreaming
资源搜索和引用标签