Unity报错:无法初始化宽高为零的非默认纹理求解决方案
解决Unity中TMP纹理初始化报错的替代方案
针对你遇到的Unity Error, Cannot initialize non-default texture with negative or zero width报错(指向TMP_FontAsset.cs第2846行的texture.Resize(0, 0, TextureFormat.Alpha8, false)),以下是无需修改源码或强制更新TMP的可行方案:
1. 检查并修复TMP字体资产配置
- 找到项目中所有
.fontasset文件,逐个打开检查Atlas Settings面板:- 确保
Atlas Width和Atlas Height均为大于0的正整数(推荐使用2的幂次,如512、1024),如果存在设为0的情况,修改后点击Apply保存。
- 确保
- 清理TMP字体缓存:顶部菜单选择
Window > TextMeshPro > Clear Font Asset Cache,之后重启Unity。
2. 重新生成问题字体资产
如果是特定字体触发报错,重新生成字体资产可解决初始化问题:
- 选中项目中的TTF/OTF字体文件,右键选择
Create > TextMeshPro > Font Asset。 - 在弹出的生成窗口中,确认
Atlas Settings的尺寸为正整数,点击Generate Font Asset。 - 替换场景、预制体中所有引用原字体资产的TMP组件,使用新生成的版本。
3. 回退到内置稳定版TMP
若更新预览版失败,可回退到Unity内置的稳定版本:
- 打开Package Manager,点击左上角
+按钮,选择Add package from disk...。 - 导航到Unity安装目录下的TMP内置包路径(通常为
Editor\Data\PackageManager\BuiltInPackages\com.unity.textmeshpro),选中package.json文件导入,覆盖当前版本。
4. 排查项目图形设置兼容性
- 进入
Edit > Project Settings > Player > Other Settings > Graphics APIs,移除当前平台不支持的图形API,保留稳定版本(如Windows平台保留Direct3D11)。 - 检查项目中所有纹理的导入设置,确保没有将
Width/Height设为0的情况,尤其是TMP生成的 atlas 纹理。
内容的提问来源于stack exchange,提问作者safae
相关产品推荐
相关产品推荐

