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.pswp.cn/diannao/95522.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/95522.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/95522.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

C++ 之 【簡介 set、multiset、map、multimap 的使用】

目錄 1.序列式、關聯式容器 2.鍵值對 3.set 3.1set的簡介 3.2set的常用函數 4.multiset 5.map 5.1map的簡介 5.2map的常用函數 6.multimap 7.練習題 1.序列式、關聯式容器 vector、deque、list、forward_list、array等是CSTL中的序列式容器 其核心特性是 元素按插入…

數據結構——排序(升級篇:快速排序、堆排序、希爾排序、計數排序)

1. 快速排序&#xff08;Quick Sort&#xff09; 原理&#xff1a; 選擇一個基準值&#xff08;pivot&#xff09;將數組分成兩部分&#xff1a;小于 pivot 的放左邊&#xff0c;大于 pivot 的放右邊。然后遞歸處理 工作過程示例&#xff1a; 示例數組&#xff1a;[5, 3, 8, 4,…

C++:淺嘗gdb

hp window11 wsl ubuntu what is gdb&#xff1f; GNU調試器&#xff08;英語&#xff1a;GNU Debugger&#xff0c;縮寫&#xff1a;GDB&#xff09;&#xff0c;是GNU軟件系統中的標準調試器&#xff0c;此外GDB也是個具有移攜性的調試器&#xff0c;經過移攜需求的調修與…

Android輸入法一些常用的命令

Android開發過程可能會遇到Android輸入法異常的問題&#xff0c;可以通過如下命令來查看和修改系統的輸入法。方便調試。 獲取當下系統的所有輸入法 adb shell ime list獲取當前的可用輸入法 adb shell ime list -s獲取當前的輸入法 adb shell settings get secure default_inp…

Sklearn 機器學習 手寫數字識別 加載并查看數據

??親愛的技術愛好者們,熱烈歡迎來到 Kant2048 的博客!我是 Thomas Kant,很開心能在CSDN上與你們相遇~?? 本博客的精華專欄: 【自動化測試】 【測試經驗】 【人工智能】 【Python】 Sklearn 機器學習 手寫數字識別:加載并查看數據 在機器學習入門案例中,手寫數字識別…

衛星通信鏈路預算之七:上行載噪比計算

在前面的文章中我們介紹了衛星通信鏈路計算的基礎知識&#xff0c;包括&#xff1a; 信噪比分配&#xff1b; 帶寬和功帶平衡原則&#xff1b; EIRP和G/T&#xff1b; 輸入回退&#xff1b; 輸入飽和通量密度SFD&#xff1b; 輸出回退&#xff1b; 這次我們正式進入正題…

一文讀懂PDB格式

最近在做分子對接和分子模擬&#xff0c;涉及到了一些盲區&#xff0c;必去pdb文件是按照列位數儲存信息的&#xff0c;跟其他文件的空格或者制表符分割很不同&#xff0c;所以也可能出現一些錯誤&#xff0c;比如信息錯位&#xff0c;因此有必要了深入解下結構相關的格式pdb、…

進階:PGCE中級專家認證精要

PGCE中級認證的核心價值技術深度&#xff1a;掌控未來生態PostgreSQL不僅是傳統關系型數據庫的標桿&#xff0c;更是云原生、AI大模型訓練、物聯網平臺等前沿場景的核心支撐。通過PGCE認證&#xff0c;你將掌握&#xff1a;萬億級數據性能調優&#xff1a;從查詢優化器原理到執…

AI增強SEO關鍵詞表現

內容概要 隨著人工智能技術的不斷演進&#xff0c;其在搜索引擎優化領域展現出顯著潛力&#xff0c;尤其在關鍵詞表現優化方面發揮著核心作用。本文將從基礎概念入手&#xff0c;系統探討AI如何智能提升關鍵詞的搜索可見性、流量吸引力和轉化效率&#xff0c;從而驅動整體SEO策…

PG靶機 - PayDay

一、 初步偵察與服務探測 1.1 端口掃描與服務識別 首先&#xff0c;對目標主機 192.168.163.39 進行一次全面的端口掃描&#xff0c;以識別其上運行的各項服務。 sudo nmap 192.168.163.39 -p- --min-rate5000 -A圖 1: Nmap 掃描結果&#xff0c;顯示開放 80、445 和 995 等端口…

MySQLl中OFFSET 的使用方法

MySQLl中OFFSET 的使用方法基本語法SELECT column1, column2, ... FROM table_name LIMIT number_of_rows OFFSET offset_value;number_of_rows&#xff1a;指定返回的記錄數量。offset_value&#xff1a;從第幾條記錄開始返回&#xff08;偏移量從 0 開始計數&#xff09;。示…

監管科技(RegTech)應用:技術驅動的合規革命

目錄 監管科技(RegTech)應用:技術驅動的合規革命 1. 監管科技革命:數字化合規新范式 2. 技術架構全景 2.1 現代RegTech架構 2.2 合規效率公式 3. 核心技術實現 3.1 智能合約自動化合規 3.2 AI驅動的風險監測引擎 4. 核心應用場景 4.1 KYC/AML全流程自動化 4.2 實時交易監控系…

解決SQL Server連接失敗:Connection refused: connect

今天創建數據庫&#xff0c;本地連接SQL Server報錯&#xff1a;“通過端口 1433 連接到主機 127.0.0.1 的 TCP/IP 連接失敗。錯誤&#xff1a;Connection refused: connect”報錯圖如下&#xff1a;查了一圈&#xff0c;問題出在&#xff1a;TCP/IP 沒啟用。如果問題和我一樣&…

Windows bypassUAC 提權技法詳解(一)

引言 用戶賬戶控制&#xff08;User Account Control, 簡稱 UAC&#xff09;是微軟自 Windows Vista 起引入的一項安全功能&#xff0c;旨在通過要求用戶在執行需要管理員權限的操作時進行確認&#xff0c;從而防止未經授權的系統更改。UAC 的設計初衷是提高系統安全性&#xf…

OpenCV ------圖像基礎處理(一)

在 OpenCV 的圖像處理世界中&#xff0c;除了圖像邊框處理&#xff0c;還有一些基礎且重要的函數和運算&#xff0c;它們在圖像編輯、融合等場景中發揮著關鍵作用。下面我們就來詳細介紹cv2.copyMakeBorder()函數的具體參數與作用&#xff0c;以及圖像加法運算和加權運算的相關…

Unity寶箱隨機事件實現指南

目錄 前言 一、簡單的使用 新增ChestInteractableEvents&#xff0c;定義寶箱交互事件 新增Box 箱子掛載腳本&#xff0c;配置事件 運行效果 二、完善各種事件 1. 完善生成金幣事件 效果&#xff0c;金幣飛出 2. 完善生成敵人事件敵人 效果 3. 完善生成藥水事件 效…

從單機到分布式:用飛算JavaAI構建可擴展的TCP多人聊天系統

1. 引言&#xff1a;飛算JavaAI與實時通信技術的融合 1.1 為什么需要TCP多人聊天室&#xff1f; 在即時通訊領域&#xff0c;基于TCP協議的聊天室是理解網絡編程核心概念的經典案例&#xff0c;其技術價值體現在&#xff1a; 底層協議控制&#xff1a;直接操作Socket實現可靠數…

用 mock 把 ES 單元測試@elastic/elasticsearch-mock 上手

一、為什么“單元測 ES”這么別扭&#xff1f; 測試 ES 代碼時&#xff0c;最直覺的做法是連真集群做集成測試&#xff08;Docker 起個 ES&#xff09;&#xff0c;但&#xff1a; 啟動 & 數據裝填慢&#xff0c;不利于并行&#xff1b;網絡/磁盤抖動影響穩定性&#xff1b…

《嵌入式Linux應用編程(三):Linux文件IO系統調用深度解析》

今日學習內容1. 文件IO與標準IO核心對比特性標準IO文件IO實現層C標準庫Linux內核系統調用緩沖機制全緩沖/行緩沖無緩沖&#xff08;實時讀寫&#xff09;操作對象FILE*流指針整型文件描述符&#xff08;fd&#xff09;移植性跨平臺兼容Linux特有典型應用場景普通文件操作硬件設…

數據結構之順序表相關算法題

目錄一、移除元素二、刪除有序數組中的重復項三、合并兩個有序數組總結一、移除元素 移除元素 - 力扣 思路一&#xff1a;就是創建一個臨時數組&#xff0c;對原數組進行遍歷&#xff0c;找出與val不同的數據放到新數組里&#xff0c;然后再將tmp中的數據導回原數組 這個思…