游戏人生
About Me
  • 你好
  • Math
    • Number
      • Float IEEE754对确定性的影响
      • Pairing Function及其用途
    • Vector and Matrix
      • TRS基础概念
      • LossyScale深入分析
    • Quatenion
      • FromToRotation实现细节
    • Lerp and Curve
      • Slerp球形插值
      • Bezier Curve为什么重要
      • Interpolation和Extrapolation实现细节
  • Programming
    • C#
      • 学习资料
      • C# struct灵魂拷问
      • CIL的世界:call和callvirt
      • .NET装箱拆箱机制
      • .NET垃圾回收机制
    • Go
      • 基础特性
      • 如何正确的判空interface
      • 如何用interface模拟多态
      • 如何定制json序列化
      • 如何安全在循环中删除元素
      • 如何安全关闭channel
      • 如何集成c++库(cgo+swig)
      • 如何性能测试(benchmark, pprof)
    • Lua
      • 基础特性
  • General Game Development
    • Game Engine
      • 学习资料
      • 关于游戏引擎的认知
    • Networking
      • 帧同步
      • 状态同步
      • 物理同步
    • Physics
      • PhysX基本概念
      • PhysX增加Scale支持
      • PhysX场景查询
      • PhysX碰撞检测
      • PhysX刚体动力学
      • PhysX角色控制器
      • PhysX接入项目工程
      • 物理同步
      • 物理破坏
    • Design Pattern
      • 常用设计模式
      • MVP 架构模式
      • ECS 架构模式
  • Unity
    • Runtime
      • Unity拥抱CoreCLR
      • 浅析Mono内存管理
    • UGUI
      • 浅析UGUI渲染机制
      • 浅析UGUI文本优化
      • 介绍若干UGUI实用技巧
    • Resource Management
      • 浅析Unity堆内存的分类和管理方式
      • 深入Unity资源
      • 深入Unity序列化
      • 深入Assetbundle机制
    • Async
      • 深入Unity协程
      • 介绍若干Unity协程实用技巧
      • 异步动作队列
    • Hot Reload
      • Unity+Xlua
      • Xlua Examples学习(一)
      • Xlua Examples学习(二)
    • Editor Extension
    • Performance
      • 浅析Unity Profiler
      • 介绍一个Overdraw分析工具
  • Platform
    • WebGL
  • Real-world Project
    • Souce Engine
    • DOOM3 BFG
Powered by GitBook
On this page
  • 字体和文本的常识介绍和优化
  • 静态字体 vs 动态字体
  • 制作自定义字体(待完善)
  • 文本网格(待完善)
  • TextMesh pro好在哪里
  • 性能敏感点
  1. Unity
  2. UGUI

浅析UGUI文本优化

Previous浅析UGUI渲染机制Next介绍若干UGUI实用技巧

Last updated 6 years ago

字体和文本的常识介绍和优化

长期以来,若使用UGUI自带的Text及相关组件(如Outline)的性能之低下就为人诟病,最有名的替代插件就是TextMeshPro。现在,这个插件将被整合到Unity 2017这个版本中()。可能很多项目还没采用这个不成熟的版本,所以我们还是要回过头来说说UGUI的文本和字体优化。

静态字体 vs 动态字体

字体库很大时(例如中文字库),在资源导入窗口应将其设为动态字体以按需加载。在Unity中,动态字体的使用可能存在如下问题:

  • 就算都是字母“A”,若其大小或样式有不同,则还是会生成不同的纹理图。

  • 当用到字库中一个新的字符,那么纹理图会rebuild(如果原来的尺寸塞不下当前的字,会以两倍大小重建纹理图)

解决方法:

  • 对于英文字母这种有限字符集,不要用动态字体。

  • 在初始化的时候预加载常用的字符集,从而减少rebuild次数。利用 Font.RequestCharactersInTexture

制作自定义字体(待完善)

文本网格(待完善)

文本中的每一个字符是单独的一个面片,而且周围空白的区域还不小,因此容易叠加在别的UI上,造成不良影响。

TextMesh pro好在哪里

介绍带符号距离场

性能敏感点

  • 勿频繁改变Text组件的属性

    • 当text组件本身变化或父节点被 Setactive(true/false) 时,会引发rebuild,有时会对性能造成明显影响。

  • 不要开启Text 中的BestFit

    • 官方原话:在任何情况下都不推荐使用。为了在一定空间内塞满所要展示的字符串,Best Fit会动态改变字体的大小,从上文中我们已经知道,Unity为不同字号的字符生成不同的纹理图,造成极大浪费。而且频繁使用会造成内存碎片。

  • 不要用OutLine组件、shadow组件

    • 实现效率之低、overdraw之高令人发指。

公告链接
http://blog.sina.com.cn/s/blog_89d90b7c0102vk20.html
http://blog.csdn.net/u011643833/article/details/46520073