一个游戏中,资源占据了游戏的大部分空间,并且在游戏启动时仅有少部分资源是必需的。运行时,通常也不会使用到加载的所有资源。 AutoStreaming,即资源自动按需加载,主要目的有以下三点:
从引擎底层支持按需加载,降低从原生App转为微信小游戏,修改代码逻辑的工作量
减小微信小游戏的首包,从而加快小游戏启动速度
避免未使用到的资源加载进内存,减少小游戏的内存占用
AutoStreaming支持以下资源类型,所有资源的Streaming配置均可通过InstantGame提供的UI工具完成:
使用一张低分辨率/低信息量图片替换游戏首包内的原始贴图,游戏运行时,先加载低分辨率/低信息量的贴图,快速启动游戏。当游戏首次使用到该Texture资源时,将触发引擎后台线程从UOS CDN下载原始贴图,完成后自动替换为原始贴图。 我们称这张低分辨率/低信息量的图为Placeholder,目前支持以下几种类型的Placeholder:
类型 | 原图 | Placeholder | 说明 |
---|---|---|---|
缩略图 | ![]() |
![]() |
默认类型,适用于大多数情况 |
透明图 | ![]() |
![]() |
用于UI可不显示模糊状态 |
模糊图 | ![]() |
![]() |
需要维持原分辨率时使用 |
Placeholder默认类型为缩略图,大小为32x32。 可以在AutoStreaming -> Texture Streaming页面查看每个texture当前的placeholder类型 类型可在原图Inspector窗口修改,其中缩略图类型支持从32 - 1024的大小调整。
图集将多张小贴图合并成一张大的贴图,以减少DrawCall,提升性能。 图集的streaming方式与纹理资源类似,也在Texture Streaming页面设置,但我们使用图集的variant作为Placeholder,通过调整variant的scale来缩小尺寸。 在Variant图集的Inspector窗口勾选Tranparent选项,可以使用透明贴图。
原图集 | 缩略图集Placeholder | 透明图集Placeholder |
---|---|---|
![]() |
![]() |
![]() |
Audio,Mesh,Animation和Font的Streaming处理与Texture/SpriteAtlas不同。 我们保留了这几类资源的对象,仅将资源内的数据从游戏首包/AB 中抽离出来,部署UOS CDN服务器上。当游戏首次使用到该Audio/Mesh资源时,将触发引擎后台线程下载资源数据,完成后自动加载到原资源对象中使用。
由于资源数据的抽取发生在打包AB或小游戏时,并且自动生成,因此不需要像Scene/Texture一样主动点一次打包AB。
将BuildSettings中的场景打包成 AssetBundle,并部署到CCD服务器上。开发者像往常一样通过 SceneManager 调用 LoadScene/LoadSceneAsync。底层将自动触发下载,完成后自动加载场景。支持通过scene name 和 Index的加载。
将每个场景单独打包成一个AB,可能会带来一个问题。被多个场景引用的资源,会被重复打包进多个scene AB中,导致scene AB总量过大,浪费场景下载时间和UOS CDN流量。 为解决这个问题,我们把这些共享资源打包进一个额外的共享AB中, 让scene AB依赖于这个共享AB,避免冗余。 由于共享AB(下图选中文件)需要在首场景前准备好,因而不宜过大(小于3MB),我们建议仅勾选对场景AB总量影响严重的资源,如:
被大多数场景引用到的资源(References中包含场景序号较多的资源)
本身较大的shader等资源
FBX文件中可能包含模型材质等诸多资源,而场景引用的仅是其中的一个或少数几个,因此不推荐勾选FBX文件,避免共享AB过大。
所有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文件查看对应的原始资源。