Version: 1.4
语言 : 中文
TextureManager 用法
AssetBundle依赖分析工具

UI使用介绍

Texture Manager Setting 设置

Texture Manager 默认是关闭状态,若需要开启,通过 Project Setting > Texture Manager Setting ,勾选 Texture Manager

属性 描述
Memory Budget 默认是1024,单位是 MB,支持调整 Texture Manager 管理的贴图内存上限,当上传到GPU中的贴图内存超过设置的阈值,会默认按照相机距离优先级剔除掉部分贴图以防止内存进一步上升。反之在预定的预算之内,会尽可能按照游戏原有的逻辑上传所需要的贴图。
Cache Budegt (WebGL Only) 默认是30,单位是 MB,当 WebGL 下载后的纹理文件占用的内存 Cache 达到上限 30MB,会根据 FIFO 规则,即先进入 cache 的会被优先从内存 cache 中剔除。当再次需要目标贴图,会直接从 Indexed DB 中读取。
Remote Load 默认关闭,作用是控制读取贴图数据是从本地还是从 CDN ;
当关闭时,编辑器运行会直接读取 Cache 中的图片资源来模拟运行 Texture Manager 功能,当启用 Remote Load 时,需要填入有效的CDN下载地址;
可以支持编辑器中模拟 Texture Manager 实时运行下载贴图功能,在编辑器中运行下载的贴图会默认放在工程的 Temp 目录下。需要注意的是,当发布 Player 时候这里必须开启 Remote Load ,因为无论是 WebGL 还是小游戏均无法直接访问本地路径文件。
Custom Cache Location 默认关闭,默认的 Cache 路径是工程的Library/textureStreamingCache/TexRes。也就是说,贴图的资源文件都会放在该路径下。针对大部分公司的 SVN 或者其他版本控制软件一般不设置同步 Library 目录,为了避免重复生成贴图文件,可以启用 Custom Cache Location ,可以修改纹理资源存储位置,方便开发者协同开发。
Dummy Texture 默认关闭,当启用 Dummy Texture 时,剔除的纹理会被默认纹理替代,而不启用时纹理不全的 Renderer 会被自动剔除。后续在高级功能会详细介绍该功能。
Batch Size 默认是 1,作用是控制单帧上传贴图的数量,默认 1 表示单帧只允许上传一张贴图。
Texture Format Platform 默认关闭,当启用 Texture Format Platform 时,可以手动为对应的平台添加启用的纹理格式。图示中的意思是: 以 WebGL 为例,当运行在 PC 上会自动选择加载 DXT 格式的纹理,当运行在手机上会自动选择 ASTC 格式的纹理。此外用户还可以进一步为不同机型做格式自定义 ASTC 格式,以满足不同性能机器的使用。后续章节我们将详细介绍该功能。

Texture Inspector 设置

属性 描述
WebStreaming 默认关闭,表示是否开启目标贴图支持 Texture Manager 管理。
Priority Level 表示优先级,默认为 Low ,目前支持三种优先级:Low、Middle、High,当纹理内存达到 Memory Budget 时,会优先剔除纹理优先级等级低的纹理。一般不用设置该选项,当需要强制保证某张贴图永远不被卸载时,可以设置为 High
Uploaded Mode 表示贴图上传模式,默认是 uploaded immediately ,表示会被立即上传,上传时机和传统贴图一样。
uploaded reference 表示贴图只有被引用才会上传到 GPU 。
upload by renderer 表示贴图被场景中的 mesh renderer 或者 skinned mesh renderer 引用才会上传。
通常在游戏场景中除了场景中被 Mesh Renderer 和 Skinned Mesh Renderer 引用的贴图需要被设置为 upload by renderer 之外,其余均应该勾选 uploaded reference ,即通过引用去上传实际需要的贴图,当引用为0则及时释放该贴图的资源。

多格式支持设置

通过开启 Texture Format Platform 的支持,我们可以针对不同平台定制对应格式如下图所示:

在多格式支持下,Texture Manager 的运行逻辑是在每张贴图初始化时,根据用户的设置获取相应的格式。在加载贴图数据文件的过程中,系统将按照该格式加载对应的贴图数据,并上传到 GPU 供使用。此外,Texture Manager 具备单独打包模块,可以并行生成多格式纹理数据。而原始 Assetbundle 由于只存储了纹理的metadata信息,只需要单次打包;即使后续增加其他格式纹理,也无需重新打包 AssetBundle 。

用户需要自行判断平台的信息,并如下设置目标平台所采用的规则:

[RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)]
static void OnBeforeSplashScreen()
{
    //用户可以根据自己的判断条件设置当前平台格式
    if(SystemInfo.graphicsDeviceName.Contains("RTX"))
    {
        TextureManager.SetSupportTextureFromat("win");
    } 
    else if (/*设备高端*/)
    {
        TextureManager.SetSupportTextureFromat("High");
    }
    else if (/*设备中端*/)
    {
        TextureManager.SetSupportTextureFromat("Middle");
    }
    else if (/*设备低端*/)
    {
        TextureManager.SetSupportTextureFromat("Low");
    }
    else
    {
        TextureManager.SetSupportTextureFromat("web");
    }
}

Texture Manager 生成的贴图数据文件的命名含义介绍:
GUID-Format-Hash128.abas ,其中 GUID 为 Unity 引擎中图片实际对应的贴图资源 GUID , Format 对应 Unity 文档中的格式 Unity Texture Format Docs ,Hash128 为数据内容 hash 。

以 0e5001bc94455964a9abc613d3e1604b–50–9d0a8.abas 为例, 0e5001bc94455964a9abc613d3e1604b 为该贴图文件在 Unity 中对应 Texture 的 GUID ,50 对应的枚举格式 TextureFormat 的 ASTC 6x6 ,9d0a8 为数据 hash 算出来的前5位。

Debug Helper

1. 性能耗时检测,可以通过 Unity Profiler 查看模块耗时消耗,如下图中:

Overview Description
Texture.UpdateUploadJobTaskQueue 更新上传任务队列耗时
Texture.ProcessUploadJobTask 处理上传任务,这里一般比较耗时,这里需要将贴图数据上传到 GPU
Texture.CheckDownloadTask 检测下载任务耗时
Texture.Thread 处理下载任务耗时

2. 贴图上传信息状态查看,当前仅支持上传模式为upload by renderer 的贴图统计信息查询,具体如下:

  • TextureManager.GetTexturesInUse() 获取当前在使用的贴图,返回值为 TextureArray ,根据每个 Texture 对应可以调用 Texture2D.GetLoadState() 获取加载贴图数据获取贴图的状态, 返回值为加载的状态码,0–5 分别代表 kNotInCache,kInCache,kUploading,kUploaded,kDeleted。
  • TextureManager.GetCurrentMemory() 获取当前的贴图上传实际上传到 GPU 的内存信息.
TextureManager 用法
AssetBundle依赖分析工具