当前位置: 首页 > news >正文

Unity TextMeshPro(二)优化

文章目录

  • 前言
  • 一、字体打包优化
  • 二、ab打包冗余
    • 1、问题
    • 1、解决方法
  • 三、字体静态优化
  • 四、扩展
  • 总结


前言

优化TextMeshPro包体大小的方法记录。


一、字体打包优化

游戏开发阶段通常使用Fast打包方式,在正式项目发布的时候需要切换一下打包方式,重新将字体打包,会获得更好的性能。(注:打包时间长达30分钟以上,想要精度更高选择SDF8等渲染模式将会更慢)
​​​​在这里插入图片描述

二、ab打包冗余

1、问题

打ab包时,预制体使用TMP会把字体打进预制中形成冗余,体积增大的同时打包速度更是如蜗牛般缓慢。解决方法,参考网上解决方案:

http://t.csdnimg.cn/3yLlC

1、解决方法

​方法为直接修改源码加载方式,下面简述其过程:

将TMP插件下的 Resources 文件夹改名为TMPPro,将字体、txt文本移动至Fonts文件夹
将TMP的包com.unity.textmeshpro从Library下移动至Packages并将文件和子文件取消只读勾选(项目不需要上传git平台忽略此步)
找到Packages\com.unity.textmeshpro\Scripts\Runtime\TMP_Setting.cs和Packages\com.unity.textmeshpro\Scripts\Editor\TMP_SettingsEditor.cs

在这里插入图片描述

1、修改TMP_Setting.cs

        public static TMP_Settings instance{get{if (s_Instance == null){//s_Instance = Resources.Load<TMP_Settings>("TMP Settings");#if UNITY_EDITORs_Instance =UnityEditor.AssetDatabase.LoadAssetAtPath<TMP_Settings>("Assets/TextMesh Pro/TMPPro/TMP Settings.asset");// Make sure TextMesh Pro UPM packages resources have been added to the user projectif (s_Instance == null && Time.frameCount != 0){// Open TMP Resources ImporterTMP_PackageResourceImporterWindow.ShowPackageImporterWindow();}
#endif}return s_Instance;}set { TMP_Settings.s_Instance = value; }}

2、修改TMP_SettingsEditor

  static UnityEngine.Object GetTMPSettings(){//return Resources.Load<TMP_Settings>("TMP Settings");return UnityEditor.AssetDatabase.LoadAssetAtPath<TMP_Settings>("Assets/TextMesh Pro/TMPPro/TMP Settings.asset");}

3、打包测试一下,看来TMP_Settings只在Editor模式下加载,必须在运行时也添加相应的加载代码,否则会出现以下情况
在这里插入图片描述
4、加载AB包后赋值。如何加载?我只能说懂得都懂,额,其实是因为大家使用的ab加载方式不同,所以加载方式会略有不同。为了防止刚接触的萌新不懂,我这里用伪代码列举一下:

using UnityEngine;
using System.Reflection;public class Main : MonoBehaviour
{//拖拽或者通过加载ab等方式获取public TMPro.TMP_Settings TMP_Settings;    private void Awake(){//初始化游戏热更框架Asset.Instance.InitFrameWork();}void Start(){//热更资源-完成后回调StartGame方法HotUpdateManager.Instance.HotAndUnPackAssets(xxx, StartGame);}/// <summary>/// 开始游戏,加载登录界面/// </summary>public void StartGame(){LoadTMP_Setting();UIModule.Instance.Initialize();UIModule.Instance.OpenWindow<LoginWindow>();}private void LoadTMP_Setting() {var settingsType = TMP_Settings.GetType();var settingsInstanceInfo = settingsType.GetField("s_Instance", BindingFlags.Static | BindingFlags.NonPublic);settingsInstanceInfo.SetValue(null, TMP_Settings);}}

5、如果有ab框架,那么则需要在框架中提前加入这个固定的字体依赖或者排除冗余,然后再特定时机加载
在这里插入图片描述
在这里插入图片描述
7、完美解决

在这里插入图片描述

三、字体静态优化

接下来我们打包ab时会非常迅速,但会出现包体过大的问题,本来几十k、几百k的文件打ab包后会增加数十倍。

原因之一是打包时使用了动态字体,那我们在打包时将字体设为静态,打包完成后再恢复就能大幅度降低包体大小。(可使用代码写一个打包方法)
在这里插入图片描述

TMP_Settings.GetFontAsset().atlasPopulationMode = AtlasPopulationMode.Static;
BuidEditor.BuildAll();//伪代码
TMP_Settings.GetFontAsset().atlasPopulationMode = AtlasPopulationMode.Dynamic;

如果你发现构建后的项目包体大小仍然有些偏大,可以通过剔除未使用的字体并制作专属的字体集来进一步优化包体。这样可以显著减少包体大小,使其更加精致和完美。

四、扩展

图文嵌套排版
表情包支持
多语言支持(两种方式:官方多语言,扩展TextMeshPro)
待更新


总结

暂无

http://www.dtcms.com/a/328365.html

相关文章:

  • Redis知识点+项目+面试八股
  • 深度解读 WizTelemetry 2.0:链路追踪如何让分布式系统“无所遁形”
  • spring-cloud整合nacos详细攻略
  • 《汇编语言:基于X86处理器》第13章 高级语言接口(2)
  • 无人机在环保监测中的应用:低空经济发展的智能监测与高效治理
  • 一体化步进伺服电机在无人机舱门应用中的应用案例
  • gpt-oss-120b 模型:笔记本上的智能“奇幻之旅”
  • 什么叫渲染效果图?啥是渲染图
  • 如何将 AGV 叉车成功集成到仓库自动化系统中?
  • 智能化评估体系:数据生产、在线化与自动化的三重奏
  • ​苹果应用高版本出现:“无法安装此app,因为无法验证其完整性”是怎么回事竟然是错误的
  • 【前端Vue】如何在log-viewer组件中添加搜索定位功能
  • 基于柔性管控终端的新能源汽车充电站有序充电系统设计与实现
  • PiaRef代码库结构梳理
  • Java 大视界 -- Java 大数据在智能教育学习效果评估指标体系构建与精准评估中的应用(394)
  • 关于Linux编程:fread/fwrite/流的定位/文件IO
  • C++右值引用学习笔记
  • wordpress获取菜单项的ID并输出
  • FPGA+护理:跨学科发展的探索(三)
  • 解锁大模型调优新姿势:LoRA微调全解析
  • 【算法】堆(Heap)的概念、懒删除(Lazy Deletion)与堆排序(Heap Sort)
  • 【实时Linux实战系列】复杂实时系统中的需求管理
  • Qt树形控件QTreeWidget详解:构建可编辑的多级课程结构
  • Nacos-2--Nacos1.x版本的通信原理
  • Web基础
  • 力扣47:全排列Ⅱ
  • 【8】Transformers快速入门:Decoder 分支和统计语言模型区别?
  • 图解软件系统组成
  • C#控制台项目,鼠标点击后线程会暂停
  • 什么是静态独享代理IP?如何选择可靠的静态独享代理IP供应商?