• 引言:本文主要介绍UGUI原理以及相关八股内容

UGUI实现原理

解析查看

UGUI本质其实就是Mesh网格,每一个可以显示的元素都是以3D模型网格构建的
Unity3D制作一个图元、或者按钮和背景时候,都会构建一个mesh网格,再把图片放进去。
说人话:UGUI其实就是用mesh网格画了一个面片,用一个网格绑定了一个材质球,材质球里面放了图片


UGUIMesh合批规则

解析查看

同一Canvas里,相同层级的,相同材质球的元素进行合并
注:shader和贴图都要相同才能合批,所以注定Text和Image无法合批
合批就是将Canvas下多个UI的网格合并在一起,如果其中任何一个元素的材质、网格顶点、位置甚至颜色在该Canvas下动态创建和删除都会重新计算合批。所以UI要动静分离。层级尽量减少(层级多了,重新计算更耗时)。
合批的基本条件是Shader和贴图相同
①合批第一步就是遍历Canvas下面UI组件,计算每个UI组件的深度值Depth(不是image的那个)
②在计算深度值的时候,会根据是否相交和能否渲染来计算深度,会得到一个UI队列
③按照深度值从小到大排序
④材质ID排序,Texture ID排序,渲染顺序排序,从小到大
⑤最后得到的这个队列,判断相邻的两个元素材质贴图是否相同,然后合批。


UI网格相交

解析查看

比如Text一个字就是一个网格,会和其他UI发生相交
计算相交时,会遍历所有UI元素和已计算的底层UI元素(平方复杂度)
源码使用分组计算包围盒矩形
16个UI元素为一组进行计算
先计算是否和底层UI相交,如果相交在与本层级的做判定

如何实现匹配不同分辨率