Unity UI合批的问题

今天看到一个问题,主要说的是Unity中的UI资源合批的问题

之前一直以为主要和UI资源在Hierarchy中的排列顺序有关,但其实这并不是最主要的,因为Unity会对同一个Canvas下的UI进行排序(注:不同Canvas下的资源是不能够合批的)

而合批的关键就是这个【排序】

先简单来说,排序主要根据三个键值:Depth、Material Id、Texture Id

  1. Depth

通常来说就是我们理解的覆盖关系,比如B覆盖在A的上方,即A先渲染,B后渲染,那么我们可以把A、B的Depth分别为0和1、如果都没有个被覆盖,那么大家的Depth都是0。Unity会先根据各个资源的Depth进行一个排序;

  1. Materail 和 Texture

在通过Depth进行排序了之后,同一Depth中的资源会先后根据【Material】和【Texture】在进行两次排序

以上就是Unity最资源排序整理的过程,而在排序了之后,就是合批。这里要注意的是,排序和合批是相互独立互不影响,排序做完了后,根据整体排序的UI资源进行合批。

举个例子,在Hierarchy中有AABB两个资源:

  • 如果深度都是0,排完序后就是AABB,那么就是两批

  • 如果深度有覆盖是0,1,其中

  • 深度为0的资源是ABB,深度为1的是A,那么就是三批

  • 深度为0的资源是AAB,深度为2的是B,那么注意,UI资源的整体排序依然是AABB,所以还是两批

所以可以理解为,深度只是排序的时候的一个基准,当排完序之后,Unity会根据整体的排序结果进行合批,合批的时候不会在乎他们是不是同一深度、材质和纹理。

猜你喜欢

转载自blog.csdn.net/Go_Accepted/article/details/128985477