PS:U3D馬上就要升級4.0了,說是在9月份,會有新的GUI系統,不知道那時會怎麼樣,我現在考慮的方案只是針對3.5.x系列的。
UILaber的優勢:
1、在NGUI的統一處理之下,對layer控制很直接,自然支援遮擋
2、支援擷取像素級的寬度、設位置
3、可以使用8bits的字型貼圖,尺寸佔得小
UILaber的問題:
1、NGUI的UILaber不支援TTF字型檔,只支援字型檔貼圖,而且得按照altas那套走。
2、建立UIFont,字型檔貼圖尺寸比字型檔大出許多,以使用BMFont產生“微軟雅黑”的18號字的字型貼圖(.png)為例:
大小 21M(ttf) 32.7M(32bits) 8.19M(8bits)
GUIText的優勢:
1、支援TTF,但是不支援動態字
2、支援擷取像素級的寬度、設位置
GUIText的問題:
1、使用動態字時效率極差,因此不得不預先產生靜態字貼圖(退回到字型貼圖了)
2、無法和NGUI的layer統一起來,做遮擋時很山寨
TextMesh的優勢:
1、支援TTF---直接使用Unity的Font,該Font直接使用TTF字型檔作為資料來源
2、支援動態字,效率可接受
TextMesh的問題:
1、無法直接獲得像素級的寬度、設位置
2、字型渲染的層次有問題,有時被遮擋的字也會被渲在前面
理想的方案是:
1、沒有效率問題
2、字型檔尺寸最小
3、支援像素級寬度
4、支援layer
5、顯存佔用少
6、支援多種字型大小
備選技術:
1、8bits的圖元+自訂shader,解決問題2
2、實現FontCacheTexture,解決問題5,加重問題1。
3、產生distance map texture + 自訂shader, 解決問題6,還能做發光字,描邊字,字型陰影,加重問題1和5。
已知決策:
1、GUIText無法和NGUI的layer統一起來,拋棄
已知的坑:
1、用技術3來做不同字型大小時,字間距如何保持1像素?
需要嘗試:
1、Laber使用8位字型貼圖試試
2、TextMesh開發新功能,支援像素級定位