TextMeshPro文字消失bug解决方案
问题演示
我们在使用Unity做游戏的应该基本上都会使用Unity的TextMeshPro插件了吧,这个插件好用是好用,但是注意有一个大家在开发的时候非常容易犯的错误,会导致在Unity编辑器内显示正常,而打包出来后游戏中的所有文字会异常消失,就像下图演示。



问题复现流程
上面的情况怎么复现的呢,就是我们场景中使用的文本和UI使用的文本用的同一个字体,然后场景中的文本框控制了大小或透明度,比如飘字效果,很常见吧,相信大家都会用到,那样就会导致所有UI的文本框也消失。
问题原因是什么?
使用Unity提供的Frame Debug排查属性,发现是其中的ZTest变更了。
正常的时候ZTest是Always,如下图所示。
文字消失的时候ZTest变成了LessEqual,也就是说我们在控制用Tween变化TextMesh文本框的时候,把ZTest属性触发了修改,至于什么时候修改的就不深究了。
问题如何解决?
找到问题了,那就好办了。
我们只需要将UI的文本框和场景的文本框的材质球替换成不一样的即可。
流程如下:
- 找到字体文件的.asset
- 选中材质球,按键盘ctrl+D复制一份
- 修改材质球的名字,比如_UI和_Scene这样区分场景用还是UI用
- 这样在文本框的Material Preset下拉会自动出现复制的材质球
- 在正确的地方选择正确的材质球即可,UI选择UI的,场景选择场景的,不能混用
- 这样修改后经过测试就一切正常了