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开发新功能,支持像素级定位