參考鏈接:http://www.xuanyusong.com/archives/4259
Unity版本2018.4.2f1,手機劇情聊天中出現了字體花屏問題。請教同事和在網上查閱資料,找到了原因:我們用的TTF動態字體,Text每次賦值的時候Unity會生成貼圖,以及保存每個字的UV信息,顯示字體的時候根據UV信息去生成的貼圖里取對應的字,渲染在屏幕上。當顯示新的文字劇情的時候,需要用到新的字,Unity重新生成字體貼圖,之前的文字還在用老的UV坐標取字,就會出現字體花屏。理論上在生成新的文字貼圖后重新刷新一下Text就能解決花屏問題。
解決方法:在展示文字的根節點添加以下組件,監聽字體貼圖變化,調用Text的刷新方法。
1 using UnityEngine; 2 using System.Collections; 3 using UnityEngine.UI; 4 5 public class UIFontDirty : MonoBehaviour 6 { 7 bool isDirty = false; 8 Font dirtyFont = null; 9 10 private void OnEnable() 11 { 12 Font.textureRebuilt += FontChanged; 13 } 14 15 private void OnDisable() 16 { 17 Font.textureRebuilt -= FontChanged; 18 } 19 20 void LateUpdate() 21 { 22 if (isDirty) 23 { 24 isDirty = false; 25 var texts = transform.GetComponentsInChildren<Text>(); 26 foreach (Text text in texts) 27 { 28 if (text.font == dirtyFont) 29 { 30 text.FontTextureChanged(); 31 } 32 } 33 dirtyFont = null; 34 } 35 } 36 37 void FontChanged(Font font) 38 { 39 isDirty = true; 40 dirtyFont = font; 41 } 42 }
