Unity3D中UGUI字體花屏問題


參考鏈接: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 }


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM