最近在弄多語言,發現遊戲中的字體庫裏面沒有俄文導致顯示俄文的時候不正常,沒辦法,只能切換語言的時候也切換支持俄文的字體庫了,項目中使用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 };
}
}