Version: 1.4
语言 : 中文
使用说明
UI使用介绍

TextureManager 用法

Prepare

快速入门

为了帮助您轻松掌握 Texture Manager 的功能,我们建议您参考 Endless Runner 示例工程来学习如何有效地管理贴图资源。本文档将基于面向微信小游戏的打包和发布,向您介绍贴图管理的基本设置步骤和核心概念,更深入的功能细节和接口说明将在后续章节详细阐述。

1. 设置运行 Endless Runner 工程

  • 创建 Endless Runner 工程。

  这一步需要保证你的引擎版本是正确的,并且已经安装了 MiniGame。

  • 切换为 MiniGame 平台。
  • Edit -> Project Settings -> Player -> Other Settings 页面,取消勾选 Auto Graphics API ,添加 OpenGLES3 并放至第一位,重启编辑器。

之所以需要更换到 OpenGLES3 ,主要是因为无论是小游戏还是 WebGL 平台,渲染都是都是基于 OpenGLES 的API,为了在编辑器中模拟加载平台资源包,需要将编辑器设置到 OpenGLES3 。

  • Edit -> Project Setttings -> Player -> MiniGame -> Other Settings 中:
    1. Texture compression format 设置为 ASTC ;(在不使用多格式支持的情况下,如果需要发布小游戏到微信或者 WebGL 平台,要求格式使用 ASTC。)
    2. Graphics APIs 设置为 WebGL 2
    3. Scripting Backend 设置为 IL2CPP
  • 点击 AssetBundles -> Build AssetBundles 生成 AssetBundle ;
  • 另外,点击 AssetBundles -> Simulation Mode ,将勾选取消,否则 Simulation 模式将不通过 AssetBundle 加载资源。
  • File -> Build Settings 中选中 Start、MainShop 场景。
  • 双击 Scenes/Start 资源打开 Start 场景,设置 Game 屏幕分辨率,点击 Play 进入游戏,确保可以正确运行。

2. 配置 TextureManager

  • 点击 Edit->Project Settings 下的 Texture Manager Settings 模块,并勾选Texture Manager 进行启动。
  • 让贴图支持 Web Streaming

    选中一张贴图,在 Inspector 面板的 Advanced 下勾选 Web Streaming ,可以设置 Priority Level 和 Uploaded Mode 。demo 中我们将贴图的 Uploaded Mode 全部设置为 Uploaded Reference

    Priority Level:贴图上传优先级,通常我们认为项目中比较重要的贴图会设置 high,一般使用默认值即可;

    Uploaded Mode:上传方式,uploaded immediately 会被立即上传,上传时机和传统贴图一样;uploaded reference 贴图只有被引用才会上传到GPU;upload by renderer 被场景中的 mesh renderer 或者 skinned mesh renderer 引用的贴图才会被上传。

  • 为了批量设置贴图,若您使用的是 Tuanjie 1.1.2 或更高版本, 可以直接在 Edit -> Project Settings -> Texture Manager Settings 界面设置图片是否开启 Web Streaming。 如下图所示:
  • 我们还准备了批量设置脚本,package 下载链接如下:点击下载
    • 导入 Package TextureManagerUtility

    • 点击 Texture Manager -> Set Texture WebStreaming 可为所有的贴图资源勾选上WebStreaming

3. 多格式支持配置

不同平台的贴图压缩格式有各自的设置,需要确保 Texture Manager 的 WebStreamingData 能够适配不同的平台。

  • Edit -> Project Setttings -> Texture Manager Settings 中勾选 Texture Format Platform,如下图所示,为不同平台设置不同的贴图压缩格式;点击 Generate Texture Web Streaming Data ,生成 WebStreamingData 。

Generate Texture Web Streaming Data 目前在OSX和Linux 平台不生效,需要自己主动调用TextureManager.GenerateMultiPlatformWebStreamingDataInternal(string\[\] guids) 生成数据

  • 自定义脚本设置平台格式:
    • 示例:将以下代码加入在首场景运行的某个 MonoBehaviour 脚本中(需根据实际的运行环境自定义条件)。
//根据硬件环境切换TextureManager支持的格式。
[RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.BeforeSplashScreen)]
static void OnBeforeSplashScreen()
{
    if (SystemInfo.graphicsDeviceName.Contains("RTX"))
        TextureManager.SetSupportTextureFromat("win");
    else
    {
        TextureManager.SetSupportTextureFromat("web");
    }
}

4. 打包工程

  • 在 Endless Runner 游戏工程中,如果资源有过更改,则需要完全重新打包;
  • 点击 AssetBundles -> Build AssetBundles 重新打包 AB;
  • 对于使用 TextureManager 的贴图资源,需要在 Edit -> Project Setttings -> TextureManagerSettings 中点击 Generate Texture Web Streaming Data 生成 WebStreamingData ,并从 Library/TextureStreamingCache 中将 TexRes 文件夹手动上传到 UOS CDN 并创建新的发布版本,具体操作留意步骤7。

5. 创建 UOS CDN Bucket

  • 点击 + 新建应用,再点击 创建新的项目 创建一个名为 Endless_Runner 的项目,然后启用 UOS( 如已有 Endless_Runner 项目可直接启用 UOS )。
  • 选择或者创建新的Bucket Endless_Runner
  • 切换到 RELEASES ,创建新的发布版本;
  • 点击 latest复制 Entry URL 前缀,该前缀将作为 Texture Manager 的CDN ,也是下一步骤中微信小游戏的游戏资源 CDN 。

注:UOS CDN 会为每一个 Bucket 自动生成一个名为 latest 的 badge ,每次上传文件,该 badge 位置都会自动更新,始终指向最新的资源版本,因此不要在提交给小游戏平台的版本中使用 latest ,以免后续资源更新时影响已发布版本。(参考快速上手步骤六,可以在 UOS 网页上创建 Badge ,也可在项目 Window -> AutoStreaming -> Cfg&Publish 中管理)

  • Edit -> Project Settings -> Texture Manager Settings 中勾选Remote Load,将Entry URL前缀+ TexRes 填入CDN Route。
    • 如果是 Tuanjie 1.1.4 及更高版本,Remote Load 在 disable 情况下,会自动将纹理数据文件复制到首包 StreamingAssets 文件夹,自动按照应用的服务器地址下载应用 StreamingAssets 文件夹下的纹理数据。

6. 配置微信小游戏转换工具

  • Tuanjie 1.1.0 的 WeixinMiniGame 平台中,自带的小游戏转换插件和当前项目不兼容,需要将其卸载的同时删除 Assets 下的 WebGLTemplates 和 WX-WASM-SDK-V2 ,并安装旧版的 SDK ,请下载 SDK package 导入到工程中。请参考微信小游戏转换SDK章节。

注:Remove 一次后,可能没完全移除,需要再 Remove 一次。

  • 打开 微信小游戏 -> 微信小游戏转换工具面板 或参考快速入门小游戏构建配置文件 。在这里有以下几个参数需要填写:

    名称 描述
    游戏appid 可从微信小游戏开发工具的 Create Mini Game 界面点击 Register 申请正式AppID,或者先点击 Test Account 获取测试 AppID ;
    注:不要获取 Mini Program 的 AppID,否则转换工具生成的是小程序;
    游戏资源CDN 游戏资源 CDN 根目录。
    注:填入上一步骤 Entry URL 前缀;若配置了 AutoStreaming 会自动填充;
    小游戏项目名称 导出的微信小游戏项目名称;
    游戏方向 横竖屏,根据游戏画面选择(默认 Portrait 竖屏);
    导出路径 生成微信小游戏工程的位置,后续步骤需要打开其中的小游戏目录。
  • 选择调试编译选项中的 WebGL 2.0
  • 将 TextureManager 资源设置为微信小游戏缓存:
    • 点击 微信小游戏转换工具面板 左下角的 更多配置项,或单击 Assets > WX-WASM-SDK-V2 > EditorMiniGameConfig 文件, 在 Inspector 面板中 Project Conf -> Bundle Path Identifier 中加入TexRes
  • 在转换小游戏界面里点按钮 生成并转换 开始打包,该步骤需要 5min 左右。

注:打包时如果遇到下面的报错,请确认安装了 node.js ,并且在系统环境变量的 path 中添加了 node.js 安装路径。

7. Assetbundle 和 TexRes 纹理数据部署

  • 进入导出路径的 webgl 子目录,选中所有文件并上传到创建的 Bucket Endless_Runner

注:该步骤不限于 UOS CDN,可以使用本地的或者自己的服务器,只需将游戏资源 CDN 替换为自己的 IP 地址。

  • Library/TextureStreamingCache 下的 TexRes 文件夹上传到创建的 Bucket Endless_Runner
  • 切换到 RELEASES,创建新的发布版本。

注:生成并转换 小游戏会使 xxxx.webgl.data.unityweb.bin.txt 文件被更新,需要在 UOS CDN 上更新并创建新的发布版本。

8. 微信开发者工具中打开工程

  • 打开微信开发者工具,选 Mini Game (小游戏)工程类型,然后点 Import 按钮,选择步骤2.6中导出路径下生成的 minigame 文件夹。注意不要选错目录。
  • 如果出现如下错误:

  • 请核对 game.js 中的 DATA_CDN 是否正确

  • 如果出现以下问题,可能原因如下:

    • url 不对,需要仔细核对;

    • 没有创建新的发布版本;

    • 资源上传到 UOS CDN 会有一定的延迟,需要等待一段时间重试。

Q&A

  1. Texture manager 主要解决什么问题?
    答:解决 WebGL 或者小游戏中项目中贴图资源使用不合理、资源包贴图资源冗余等问题导致的内存消耗以及多平台资源格式不同。目标是通过单独的资源管理模块实现对游戏项目中贴图资源的全生命周期管理。

  2. Texture manager 可以使用自己的 CDN 吗?
    答:可以,目前我们推荐采用 UOS 的 CDN ,后续我们会在集成 UOS CDN 的一些功能做资源的优化,如采用针对小文件性能友好的 H2 协议、通过 CDN 历史加载数据动态优化数据加载,版本控制管理等功能。

  3. Texture manager 目前支持的图片格式类型有哪些?
    答:普通的 Texture2D 格式、天空盒、Sprite( 2D and UI )、图集等均支持。

  4. 目前重度项目中有内部测试过吗,会存在哪些已知问题?
    答:目前在内部测试重度项目,过程中,主要是生成资源较慢,资源有的可能生成数据丢失难以定位,资源设置比较麻烦。针对这些问题,我们也在积极开发解决方案,如贴图数据并行生成,Texture Manager Browser Package 帮助用户集中管理贴图。

使用说明
UI使用介绍