Unity3D顯示中文的各種方案的比較

來源:互聯網
上載者:User

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開發新功能,支援像素級定位

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.