优化TMP字体资源大小的思路

文章介绍了如何在Unity中将FontAsset的模式改为静态打包,避免字体文件打包;剥离并压缩图集,以及如何在Addressable系统下进行相应设置,确保字库更新不影响打包效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第一步,将FontAsset的模式改为静态


这样打包时就不会将字体文件打包,而是只打包图集。为了方便增加字库时自动修改图集,我们要在平时使用动态模式。在打包时自动改为静态,打包后在改回动态。下面是 伪代码

TMP_Settings.GetFontAsset().atlasPopulationMode = AtlasPopulationMode.Static;
BuildPipeline.BuildPlayer();
TMP_Settings.GetFontAsset().atlasPopulationMode = AtlasPopulationMode.Dynamic;

第二步,将FontAsset里的图集剥离并压缩

一:剥离图集

先Ctrl+D 手动复制出图集

然后将图集从FontAsset中删除

[MenuItem("Tool/Text/Do")]
    public static void Do()
    {
        if (Selection.activeObject is TMP_FontAsset TMPFontAsset)
        { 
            AssetDatabase.RemoveObjectFromAsset(TMPFontAsset.atlasTexture);
            AssetDatabase.SaveAssets();
        }
    }


进入Debug模式,手动将复制出的图集赋值到箭头指的地方
在这里插入图片描述
到这一步,我们已经将图集剥离出来,同时在TextPro中输入新的字能自动加入图集。

二:打开材质球面板的DebugSettings,将图集赋值给材质球

剥离后Text无法显示内容
在这里插入图片描述
将图集赋值给材质球
在这里插入图片描述
到这一步Text就可以正常显示了,但是这只是临时的,后面我们要用压缩后的图赋值给材质球。

三:压缩

将图集转为png格式保存,然后赋值给FontAsset的材质球。

public Material[] TextMaterials;//所有FontAsset的材质球
public Texture2D TextTexture2D;//复制出的图集
public Texture2D TextPng;//保存的png
public void ReplaceTextTexture()
{
	//创建用于压缩的png
	byte[] bytes = TextTexture2D.EncodeToPNG();
	System.IO.File.WriteAllBytes("Assets/Bundles/font.png", bytes);
	TextPng = AssetDatabase.LoadAssetAtPath<Texture2D>("Assets/Bundles/font.png");
	//批量赋值,或者只用上面的代码创建png,手动赋值
	foreach (var material in TextMaterials)
	{
		material.SetTexture("_MainTex",TextPng);
	}
	AssetDatabase.Refresh();
}

接下来修改Size,开启压缩,去掉mipmaps,就完成了。
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

四:剔除FontAsset中用于更新字库的图集

如果这个图集跟着一块打包了,那么之前的努力就都白费了。
这一步需要修改源代码。
打开 TMP_FontAsset.cs,把m_AtlasTexture改成只有编辑模式下才能序列化

#if UNITY_EDITOR
        [SerializeField] 
#endif
        internal Texture2D m_AtlasTexture;

五:打包测试

我用的是Addressable,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值