最近在弄多语言,发现游戏中的字体库里面没有俄文导致显示俄文的时候不正常,没办法,只能切换语言的时候也切换支持俄文的字体库了,项目中使用NGUI的UILabel的地方,直接切换label.bitmapFont = realFont;就搞定了。没想到使用了TextMesh的地方,直接label.font=realFont;之后,文字显示就错乱了。如下图:
弄了大半天,考虑是不是Font.textureRebuilt的问题,发现这个事件根本就没调用。
最后终于发现了其中的猫腻...
原来切换之后,MeshRender里面的Meterial关联的还是旧字体的Meterial,因为Meterial不一样,里面的纹理也不一样,所以难怪会错乱。
知道问题就好办了,切换字体的时候,顺便修改下MeshRender的Meterials就搞定了。
if (label.font!=realFont) {
label.font = realFont;
//修复替换字体后文字错乱
MeshRenderer meshRender = label.GetComponent<MeshRenderer> ();
if (meshRender != null) {
meshRender.materials = new Material[]{ realFont.material };
}
}