Unity中的层级以及渲染顺序

0x00 写在前面
在使用unity3d开发游戏项目时,层级的问题往往伴随着UI的开发,而在引入了3D模型、粒子特效后,层级的问题就变得有些扑朔迷离了,甚至会牵扯到Unity的渲染顺序。本篇主要从UGUI的角度出发,浅析UGUI中影响层级的因素。后续会分析UI与3D对象,UI与粒子特效之间层级的关系。

0x01 影响层级的因素
前提条件:
- Camera-Clear Flags
- Canvas-Render Mode

影响层级的因素:

  • Camera
    • depth
  • Canvas
    • Hierarchy中的排列顺序
    • sorting layer
      • order in layer
  • Shader中的RenderQueue

0x02 Camera中的Clear Flags
skybox
屏幕上的空白处将会以以当前camera的skybox填充。
solid color
屏幕上的空白处将会以当前camera的background color填充。
Depth only
每次绘制前,只是清空深度缓冲区,但是并没有清空颜色缓冲区。(一般适用于多个camera的情况)
Don’t Clear
该模式不清除任何颜色或者深度缓存。每帧绘制在下一帧之上,造成涂片效果

camera的clear Flags选定Don’t Clear 或者 当我们只有一个camera时选定Depth only 会出现以下涂片效果:
涂片效果]

参考资料:https://docs.unity3d.com/Manual/class-Camera.html

0x03 Canvas的Render Mode
Render Mode主要用于定义UI如何渲染于屏幕之上。通常一个Scene只需一个Canvas即可,不过Canvas自身也是支持嵌套的,默认情况下,子Canvas与父Canvas的Render Mode保持一致。
Screen Space-Overlay
此模式下,Canvas会被缩放以适应屏幕,然后直接渲染到屏幕上,无需任何摄像机。屏幕尺寸或者分辨率改变了,UI会自动进行缩放,UI会覆盖所有其他摄像机的画面。
这里写图片描述
该模式下需要特别注意:Canvas需要放在Hierarchy所有元素的顶层,否则UI可能会从视图中消失。这是Unity内置的限制。
原文:Note: The Screen Space - Overlay canvas needs to be stored at the top level of the hierarchy. If this is not used then the UI may disappear from the view. This is a built-in limitation. Keep the Screen Space - Overlay canvas at the top level of the hierarchy to get expected results.


Screen Space-Camera
此模式下,Canvas会渲染于摄像机前面指定距离的一个平面上。UI在屏幕上的大小并不随此距离变化而变化(有点像正交投影)。场景中的物件可能与UI遮挡。
[图片-Camera]


World Space
此模式下,UI被看作是场景中的一个平面物体。UI此时可以不朝向Camera,其他场景中的物件除了可以与UI遮挡外,还可能与UI穿插。
[图片-World]
参考资料:https://docs.unity3d.com/Manual/class-Canvas.html

0x04 UI与3D物体
通常的游戏项目会采用两个Camera,一个UICamera用于绘制UI,一个GameCamera用于绘制游戏中的3D对象。这时候就引入了新的复杂度,多个Camera如何管理,又如何协同工作的问题。不考虑3DUI的普遍情况下,UI往往位于场景中的3D模型上方。
这里写图片描述

GameCamera的Depth = -1,Culling Mask为everything不进行剔除操作,ClearFlags的标志为skybox,表示空白的地方以天空盒填充。


这里写图片描述
UICamera的Depth = 0,Culling Mask为UI,UICamera嘛盯着UI就够了。Projection一般选Orthographic就好,选择PerspectiveUI可能会出现类似透视Camera下的旋转和扭曲等奇怪的现象。去除Audio Listener是为了避免unity中2 audio listeners的报错。


这里写图片描述
将Canvas的Render Mode设置为Screen Space-Camera。


最后的效果如图:
这里写图片描述

  • 4
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Unity的Hierarchy层级面板是一个能够显示当前场景所有游戏对象层次结构的面板,可以用于整理和管理游戏对象的父子关系。层级整理是指对Hierarchy面板的游戏对象进行排序和组织,以方便开发者更好地管理和编辑场景。 在Unity,可以通过拖拽游戏对象到其他游戏对象上来创建父子关系。这样,当一个父对象移动或旋转时,其所有子对象也会跟随移动或旋转。这种层级关系的建立非常有利于开发者对游戏对象的管理和编辑。 层级整理可以通过多种方式进行,比如对游戏对象进行分组、重命名和排序。通过创建空的游戏对象作为父对象,可以将其他相关的游戏对象拖拽到该父对象下,从而形成一个组。这样,当需要对这些游戏对象进行操作时,只需要选择父对象即可,方便快速地进行管理。 除了分组和重命名,层级整理还可以通过拖拽和嵌套的方式来对游戏对象进行排序。通过改变游戏对象在Hierarchy面板的位置,可以改变它们在场景渲染顺序,从而实现不同游戏对象的遮挡效果。 层级整理有助于保持场景的结构化和整洁性,提高开发效率和可读性。它可以帮助开发者更好地管理和编辑复杂的场景,同时也方便了代码的编写和脚本的附加。 在使用Unity进行游戏开发时,合理地整理和利用Hierarchy层级面板是非常重要的,它能够极大地提升开发效率和项目管理的质量。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值