Unity文档——Unity UI的基础知识

Unity UI的基础知识

版本检查:2017.3

-

难度:高级

 

了解构成Unity UI系统的不同部分非常重要。有几个基本类和组件一起组成系统。本章首先定义了本系列文章中使用的一些术语,然后讨论了几个Unity UI关键系统的低级行为。

术语

一个帆布是使用统一的渲染系统提供将被吸入,或上,游戏的世界空间顶部分层几何本机代码统一组件。

画布负责将其组成几何体组合成批次,生成适当的渲染命令并将这些命令发送到Unity的图形系统。所有这些都是在本机C ++代码中完成的,称为重新分组批量构建。当Canvas被标记为包含需要重新分级的几何体时,Canvas被视为

Canvas Renderer组件为Canvases提供了几何

亚画布仅仅是一个嵌套在另一个Canvas组件内的画布组件。子画布将他们的孩子与父母隔离开来; 脏孩子不会强迫父母重建其几何体,反之亦然。某些边缘情况并非如此,例如,对父Canvas的更改会导致调整子Canvas的大小。

图形是由统一UI C#库提供的基类。它是所有Unity UI C#类的基类,它为Canvas系统提供可绘制的几何体。大多数内置的Unity UI图形都是通过MaskableGraphic子类实现的,它允许通过IMaskable接口对它们进行屏蔽。Drawable的主要子类是ImageText,它们提供了它们的同名组件。

布局组件控制RectTransforms的大小和位置,通常用于创建需要相对大小或相对定位其内容的复杂布局。布局组件仅依赖于RectTransforms,并且仅影响其关联的RectTransforms的属性。它们不依赖于Graphic类,可以独立于Unity UI的Graphic组件使用。

Graphic和Layout组件都依赖于CanvasUpdateRegistry类,该类未在Unity Editor的界面中公开。此类跟踪必须更新的Layout组件和Graphic组件集,并在关联的Canvas调用willRenderCanvases事件时根据需要触发更新。

布局和图形组件的更新称为重建。本文档后面将进一步详细讨论重建过程。

渲染细节

在Unity UI中编写用户界面时,请记住,Canvas绘制的所有几何体都将在透明队列中绘制。也就是说,Unity UI生成的几何体将始终使用Alpha混合从前向后绘制。从性能角度来看,要记住的重要一点是,从多边形栅格化的每个像素都将被采样,即使它完全被其他不透明多边形覆盖。在移动设备上,这种高水平的透支可以快速超过GPU的填充率容量。

批量构建过程(画布)

批处理构建过程是Canvas组合表示其UI元素的网格并生成适当的渲染命令以发送到Unity的图形管道的过程。缓存并重复使用此过程的结果,直到Canvas被标记为脏,只要其组成网格之一发生更改,就会发生这种情况。

Canvas使用的网格取自附加到Canvas但不包含在任何Sub-canvas中的Canvas Renderer组件集。

计算批次需要按深度对网格进行排序,并检查重叠,共享材料等。此操作是多线程的,因此其性能在不同的CPU架构之间通常会有很大差异,特别是在移动SoC(通常具有少量CPU内核)和现代桌面CPU(通常具有4个或更多内核)之间。

重建过程(图形)

重建过程是重新计算Unity UI的C#Graphic组件的布局和网格的过程。这在CanvasUpdateRegistry类中执行。请记住,这是一个C#类,它的源代码可以在Unity的Bitbucket上找到。

CanvasUpdateRegistry中,感兴趣的方法是PerformUpdate。只要Canvas组件调用WillRenderCanvases事件,就会调用此方法。每帧调用此事件一次。

PerformUpdate运行三个步骤:

  • 要求Dirty Layout组件通过ICanvasElement.Rebuild方法重建其布局。
  • 要求任何已注册的剪辑组件(例如蒙版)剔除任何剪切的组件。这是通过ClippingRegistry.Cull完成的。
  • 要求脏图形组件重建其图形元素。

对于布局和图形重建,该过程分为多个部分。布局重建分为三个部分(PreLayout,Layout和PostLayout),而Graphic重建运行在两个部分(PreRender和LatePreRender)。

布局重建

要重新计算一个或多个布局组件中包含的组件的适当位置(以及可能的大小),必须以适当的层次结构顺序应用布局。靠近GameObject层次结构中的根的布局可能会改变可能嵌套在其中的任何布局的位置和大小,因此必须首先计算。

为此,Unity UI按层次结构中的深度对脏布局组件列表进行排序。层次结构中较高的项目(即具有较少的父变换)将移动到列表的前面。

然后请求排序的布局组件列表重建其布局; 这是实际更改由布局组件控制的UI元素的位置和大小的位置。有关布局如何影响各个元素位置的更多详细信息,请参阅Unity手册的UI自动布局部分。

图形重建

重建Graphic组件时,Unity UI将控制权传递给ICanvasElement接口的Rebuild方法。Graphic实现了这一点,并在重建过程的PreRender阶段运行了两个不同的重建步骤。

  • 如果顶点数据已标记为脏(例如,当组件的RectTransform已更改大小时),则重建网格。
  • 如果材料数据已标记为脏(例如,当组件的材质或纹理已更改时),则将更新附加的Canvas渲染器材质。

图形重建不会以任何特定顺序通过图形组件列表,也不需要任何排序操作。

猜你喜欢

转载自blog.csdn.net/zhaoguanghui2012/article/details/81232340
今日推荐