![41757a9b7dc38079b6d9de356f2bca77.png](https://i-blog.csdnimg.cn/blog_migrate/f263b112c6ba40c3cc7f8464c6f3faee.jpeg)
一、序
本文大部分内容是对2017 Epic Game的工程师郭春飚先生在 Unreal Open Day上演讲的进一步解释及实际案例分析,欢迎大家多多交流。
二、基础介绍
首先对UE4中UMG渲染结构进行简要介绍:
![bfe537bb0e1bd8d232e2eda8573eeb91.png](https://i-blog.csdnimg.cn/blog_migrate/b49c2cc6fb2d47d4527d3be86a417da0.jpeg)
User Widget:对应一个用户界面。
Widget Tree:每一个 User Widget 都是存储成树状结构。
Panel Widget:不会渲染出来,用于对 Child Widget 进行布局,如 Canva Panel, Grid Panel, Horizontal Box 等。
Common Widget:用于渲染,会生成到最后的 Draw Elements 中,如 Button, Image, Text 等
在游戏渲染时,会遍历两遍widget tree,分别计算widget的尺寸和draw elements,draw elements是根据common widget的类型和参数生成的。一个user widget会生成1个或多个draw elements。
三、优化技巧
1.可见性
![262e6e72162daaedf6f6943843e3ce35.png](https://i-blog.csdnimg.cn/blog_migrate/b37c5503f6b130919cb289bfecf9fd5e.png)
之前我们在UMG里面介绍过Visbility内不同设置代表的意思。
- Visible 可见并接受交互事件
- Collapsed 不可见且不占用任何体积
- Hidden 不可见但占用体积,不接收交互事件
- Hit test invisible 可见,且他和他的子节点都不接受点击事件
- Set hit test visible 可见,且他自身不接受点击事件,不影响子节点
那么在渲染消耗上从小到大的顺序是 Collapsed<Hidden<Hit test invisible=Set hit test vis