浅析UGUI文本优化
字体和文本的常识介绍和优化
长期以来,若使用UGUI自带的Text及相关组件(如Outline)的性能之低下就为人诟病,最有名的替代插件就是TextMeshPro
。现在,这个插件将被整合到Unity 2017
这个版本中(公告链接)。可能很多项目还没采用这个不成熟的版本,所以我们还是要回过头来说说UGUI的文本和字体优化。
静态字体 vs 动态字体
字体库很大时(例如中文字库),在资源导入窗口应将其设为动态字体以按需加载。在Unity中,动态字体的使用可能存在如下问题:
就算都是字母“A”,若其大小或样式有不同,则还是会生成不同的纹理图。
当用到字库中一个新的字符,那么纹理图会rebuild(如果原来的尺寸塞不下当前的字,会以两倍大小重建纹理图)
解决方法:
对于英文字母这种有限字符集,不要用动态字体。
在初始化的时候预加载常用的字符集,从而减少rebuild次数。利用
Font.RequestCharactersInTexture
制作自定义字体(待完善)
http://blog.sina.com.cn/s/blog_89d90b7c0102vk20.html http://blog.csdn.net/u011643833/article/details/46520073
文本网格(待完善)
文本中的每一个字符是单独的一个面片,而且周围空白的区域还不小,因此容易叠加在别的UI上,造成不良影响。
TextMesh pro好在哪里
介绍带符号距离场
性能敏感点
勿频繁改变Text组件的属性
当text组件本身变化或父节点被
Setactive(true/false)
时,会引发rebuild,有时会对性能造成明显影响。
不要开启Text 中的BestFit
官方原话:在任何情况下都不推荐使用。为了在一定空间内塞满所要展示的字符串,Best Fit会动态改变字体的大小,从上文中我们已经知道,Unity为不同字号的字符生成不同的纹理图,造成极大浪费。而且频繁使用会造成内存碎片。
不要用OutLine组件、shadow组件
实现效率之低、overdraw之高令人发指。
Last updated