Version: 1.3
语言 : 中文
Texture Manager 使用说明
UI使用介绍

快速上手

Prepare

Quickly Start

为了确保你可以轻松的使用Texture Manager 功能,在使用Texture Manager 功能之前,我们建议可以按照Endless Runner工程为示范,来学习如何正确的使用Texture Manager 来管理你的贴图。此外,文档主要介绍设置贴图管理的基本步骤和一些功能的基本概念。在下一个章节会详细的介绍功能的所有细节和接口。

1. 设置运行Endless Runner工程

  • 创建Endless Runner工程。

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

  • 切换为Weixin MiniGame平台。
  • 进入Edit->Project Settings->Player->Settings for Windows,Mac, Linux->Other Settings,取消勾选Auto Graphics API for Windows,添加OpenGLES3并放至第一位,重启编辑器。之所以需要更换到OpenGLES3,主要是因为无论是微信小游戏还是WebGL平台,渲染都是都是基于OpenGLES 的API,为了在编辑器中模拟加载平台资源包,我们需要将编辑器设置到OpenGLES3。
  • 在Edit->Project Setttings->Player->Setttings for Weixin MiniGame->OtherSettings中,(1)将Texture compression format设置为ASTC;(2)将Graphics APIs设置为WebGL 2;(3)将Scripting Backend设置为IL2CPP。在不使用多格式支持的情况下,如果需要发布小游戏到微信或者WebGL平台,我们要求格式是使用ASTC。
  • 点击AssetBundles->Build AssetBundles生成AssetBundle;另外,点击AssetBundles->Simulation Mode,将勾选取消,否则Simulation模式将不通过AssetBundle加载资源。
  • 将Start、Main和Shop场景添加到Build Settings。
  • 双击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 引用的贴图才会上传。

  • 为了批量设置贴图,我们准备了批量设置脚本,package下载链接如下:点击下载

  • 导入PackageTextureManagerUtility

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

  • 如果是新版本 Tuanjie 1.1.2, 可以直接在Texture Manager setting界面设置图片是否开启 Web Streaming。 如下图所示

3. 多格式支持配置

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

  • 在Edit->Project Setttings->TextureManagerSettings中勾选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并创建新的发布版本,具体操作留意步骤2.7。

5. 创建UOS CDN Bucket

  • 点击 + 新建应用,再点击创建新的项目创建一个名为 Endless_Runner 的项目,然后启用UOS(如已有 Endless_Runner项目可直接启用UOS)。
  • 选择或者创建新的BucketEndless_Runner
  • 切换到RELEASES,创建新的发布版本。

  • 复制Entry URL前缀,该前缀将作为Texture Manager的CDN

  • 下一步骤中微信小游戏的游戏资源CDN。

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

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

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

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

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

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

7. Assetbundle和TexRes纹理数据部署

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

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

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

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

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

  • 打开微信开发者工具,选Mini Game(小游戏)工程类型,然后点Import按钮,选择步骤2.6中导出路径下生成的minigame文件夹。注意不要选错目录。
image
image
  • 如果出现如下错误:
  • 请核对game.js中的DATA_CDN是否正确
  • 如果出现以下问题,可能原因如下:
  • url不对,需要仔细核对;
  • 没有创建新的发布版本;
  • 资源上传到Uos CDN会有一定的延迟,需要等待一段时间重试。

Q&A

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

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

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

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

Texture Manager 使用说明
UI使用介绍