欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

如何调整UGUI中元素的显示顺序与控件层级管理

最编程 2024-02-07 17:51:07
...

元素的渲染顺序

1.Camera是渲染顺序的最大总指挥

顺序由Camera的Depth值决定,值越小视野范围越先渲染

2.layer是对游戏中所有物体的分类别划分

    如Default、TransparentFX等。可以将不同类别的物体划分到不同的层,便于相机拣选,在相机的Culling Mask中可以选择渲染哪些层,不选择的层则不会渲染,还可以用于射线检测对象的拣选,可以指定只对某些层的对象进行射线检测。

3.canvas上的层级关系

    canvas默认的Render Mode是Screen Space-Overlay模式,此时仅具有sort order属性,当把它设置为Screen Space-Camera或者World Space时,sort order属性消失了,变成了另外两个属性:sorting layer,order in layer。

    当把画布设置为Screen Space-Camera或者World Space后,画布及画布上的UI对象在世界空间默认也是靠Z值来决定渲染顺序的,离相机远的先渲染。当设置了sorting layer后,渲染的次序就由sorting layer来确定了。sorting layer是自定义的标识符,哪个sortinglayer在前(在layer & tags中设置的先后顺序)哪个先渲染。

    order in layer是个数值,是在同一个sorting layer内的细分,sorting layer相同时order in layer的数值越小越先渲染。

    屏幕空间的东西都处于UI层不需要sorting layer,只提供sort order(其实也就是order in layer)。 默认情况下sort oder都是0,此时UI物件按照在hierachy中出现的顺序决定渲染顺序。如果sort order不同时,值越小越先渲染。

4、2DObject--sprite问题

    特别注意sprite默认是个3D空间的物体,就算把它放到一个屏幕空间的canvas上,它仍然是3D空间的物体,只遵循3D空间的规则:总是会被UI挡住。

总结:

  • 不同的Camera的Depth
  • 相同Camera下的不同SortingLayer
  • 相同SortingLayer下的不同Z轴/Order in Layer

改变控件之间的层级关系

  • 同一canvas下: 

可以在hierarchy中拖动元素进行重新排序来更改元素的渲染顺序,还可以在变换组件上使用SetAsFisrtSibling、SetAsLastSibling和SetSiblingIndex方法从脚本来控制渲染顺序。

 改变控件transform的SiblingIndex:

transform.GetSiblingIndex();  
transform.SetSiblingIndex(int index); //index值越大,越后渲染,层级越大,越显示在前面
  • 不同Canvas下:

 设置Canvas下的Sort Order       //Sort Order值越大,越后渲染,层级越大,越显示在前面

推荐阅读