2019-02-09 13:23:41 zcaixzy5211314 阅读数 1525
  • Unity 值得看的500+ 技术内容列表

    Unity3D是由Unity Technologies开发的一个让玩家轻松创建诸如三维视频游戏、建筑可视化、实时三维动画等类型互动内容的多平台的综合型游戏开发工具,是一个全面整合的专业游戏引擎。

UGUI系列其他博文,可通过导航帖查看

一、UI渲染层级概念

UI渲染层级实际简单理解就是我们时间看到的UI遮挡关系,在unity中有多种方式可以控制UI的渲染顺序

在unity中层级通常都是用数字表示的比如相机的Depth,Canvas的Order Layer,它们的参数都是数字,那么首先,我们要清楚,这个数字代表的含义
在这里插入图片描述

如图,就好像我们从上向下看一样,数字大的在上面,数字小的在下面,所以在显示上层级数字大的会覆盖层级数字小的

引擎渲染的时候,是按照数字从小到大依次渲染,那么就意味着后渲染的会覆盖之前渲染的,所以看起来就是遮挡住了之前的UI

二、决定UI显示顺序的因素

1)Camera

对层级影响最大的是相机,相机的Depth属性代表的是相机的渲染层级,这个是决定UI显示顺序的首要因素

2)Sorting Layer

其次是Sorting Layer,它是根据你自动定义的层级从上至下依次渲染
在这里插入图片描述
也就是下面的layer会覆盖上面的layer

3)Order in Layer

顾名思义,就是决定在同layer内的渲染顺序

4)UI的自然层级

这个自然层级是我自己对这部分的称呼,实际就是UI在Hierarchy中的排列顺序
在unity中Hierarchy上的物体是从上至下渲染的,也就是说,放到下面的UI会覆盖上面的UI
在这里插入图片描述
在这里插入图片描述
但是UI的自然层级只有在没有指定sort之类的东西的时候才有效,在指定了渲染顺序后,以指定的顺序为优先

我会在我的公众号上推送新的博文,也可以帮大家解答问题
微信公众号 Andy and Unity 搜索名称或扫描二维码
在这里插入图片描述
希望我们能共同成长,共同进步

2017-10-17 21:51:19 u010832643 阅读数 7040
  • Unity 值得看的500+ 技术内容列表

    Unity3D是由Unity Technologies开发的一个让玩家轻松创建诸如三维视频游戏、建筑可视化、实时三维动画等类型互动内容的多平台的综合型游戏开发工具,是一个全面整合的专业游戏引擎。

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。


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

2015-10-14 14:15:36 qq_29434987 阅读数 444
  • Unity 值得看的500+ 技术内容列表

    Unity3D是由Unity Technologies开发的一个让玩家轻松创建诸如三维视频游戏、建筑可视化、实时三维动画等类型互动内容的多平台的综合型游戏开发工具,是一个全面整合的专业游戏引擎。

有时候需要在UI界面上挂粒子特效,但是不管怎么移动特效的位置,在Game里面都看不到特效。 这是因为
粒子特效的默认渲染层级比UI的渲染层级低。 UI默认的渲染层级为3000,把粒子特效的渲染层级改到3000以上就可以了。

 public static void SetMaterialRenderQueue(Transform trans, int renderQueue)
        {
            Renderer[] renders = trans.GetComponentsInChildren<Renderer>();
            if (renders != null)
            {
                for (int i = 0; i < renders.Length; ++i)
                {
                    if (renders[i].material != null) renders[i].material.renderQueue = renderQueue;
                }
            }
        }

renderQueue默认一般为3000,如果想要渲染的物体层级在默认的层级上面,那么renderQueue的值大于3000即可,反之亦然!

 

 

 

2018-07-05 11:41:36 fdbvm 阅读数 436
  • Unity 值得看的500+ 技术内容列表

    Unity3D是由Unity Technologies开发的一个让玩家轻松创建诸如三维视频游戏、建筑可视化、实时三维动画等类型互动内容的多平台的综合型游戏开发工具,是一个全面整合的专业游戏引擎。

使用world spcace canvas,直接将下边image的材质替换成一个overlay的材质并不能够覆盖在所有物体之上 还需要修改canvas本身的SortingLayer

另外如果透明材质 虽然有transparent的设置 但是没有设置blend的方式的化 还是没有透明效果

参考如下

转自http://blog.csdn.net/kingsea168/article/details/50252733

之前一直用NGUI开发界面,但看到现在的unity的新版本的UGUI也不错,这几天专门学习了一下,用过NGUI的人都知道NGUI的渲染顺序或者层级关系是Deapth(深度)决定,而UGUI的界面是用Canvas(画布)进行布局的,它的渲染顺序有所不同,下面我进行了总结:

Unity UGUI
1.Unity3d中的渲染顺序如下:
  不同的Camera的Depth
  相同Camera下的不同SortingLayer
  相同SortingLayer下的不同Z轴/Order in Layer
2.改变控件之间的层级关系
 (1)同一canvas下:
     改变控件transform的SiblingIndex,
     transform.GetSiblingIndex();
     transform.SetSiblingIndex(int index); //index值越大,越后渲染,层级越大,越显示在前面
 (2)不同Canvas下:
    设置Canvas下的Sort Order //Sort Order值越大,越后渲染,层级越大,越显示在前面

 
2016-08-25 19:38:14 IIIwoLV 阅读数 2921
  • Unity 值得看的500+ 技术内容列表

    Unity3D是由Unity Technologies开发的一个让玩家轻松创建诸如三维视频游戏、建筑可视化、实时三维动画等类型互动内容的多平台的综合型游戏开发工具,是一个全面整合的专业游戏引擎。

作为新手,最近正在做的项目用到了特效。但是在NGUI内特效和UI的层级会有问题。经过在网上无数次,近乎快绝望的情况下,终于找到了解决方法。再没人稳的情况下,新手都不容易。废话了这么多,下面说说解决方法。

在NGUI内UIPanel会默认的将UI的渲染层级提高到3000以上,而特效的层级也是3000。因此为了将特效放在最上层,应该讲UI的渲染层级降低到3000以下。

将图片中的rq降低到3000以下,即可让特效层处于最上层。


新手加油!!!

Unity渲染层级关系

阅读数 1923

没有更多推荐了,返回首页