1. 问题背景与现象分析
在Unity项目中使用Addressable资源管理系统时,很多开发者会遇到TextMeshPro资源被重复打包的问题。具体表现为:TMP Essentials资源包中的字体和材质文件会被同时打包到主程序包和Addressable资源包中,导致最终构建的应用体积增大。
这个问题的根源在于Unity的资源依赖机制。TextMeshPro作为Unity的官方文本渲染解决方案,其核心资源(如默认字体、材质)会被标记为"Always Included"资源。当我们在项目中同时使用Addressable系统管理这些资源时,Unity的构建管线会将这些资源同时打包到两个位置:
- 主程序包(Built-in Resources):Unity默认会将TMP Essentials中的关键资源强制包含在应用的主包中
- Addressable资源包:如果我们在项目中通过Addressable引用了这些资源,它们又会被打包到Addressable的资源包中
这种重复不仅浪费存储空间,在某些情况下还可能导致运行时资源冲突。比如当游戏尝试从不同位置加载同一字体时,可能会引发意料之外的行为。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 解决方案原理与步骤
2.1 核心解决思路
要彻底解决这个问题,我们需要打破Unity对TMP资源的强制包含机制,同时确保Addressable系统能够正确管理这些资源。具体来说需要完成以下三个关键操作:
- 解除TMP Settings对默认字体的强制引用
- 将字体和材质资源移出TMP Essentials包的特殊目录
- 在项目中建立新的字体引用关系
2.2 详细操作步骤
2.2.1 修改TMP Settings配置
- 在Unity编辑器中,打开"Window > TextMeshPro > TMP Settings"面板
- 找到"Default Font Asset"选项,将其设置为"None"
- 保存修改(这个设置会存储在ProjectSettings/TMP Settings.asset文件中)
注意:这一步会暂时导致场景中的TMP文本显示异常,这是正常现象,我们将在后续步骤中修复
2.2.2 迁移字体资源
- 在Project窗口中定位到"TextMesh
