Unity中UI和游戏物体之间的层级渲染

来源:互联网 发布:日语jtest考试软件 编辑:程序博客网 时间:2024/05/11 01:34
之前使用一个UICamera和一个MainCamera做场景,希望给场景加上一个BackGround,但是将BackGround和操作的UI都绑在UICamera,将游戏物体正常地用MainCamera渲染时,出现了游戏物体遮挡住Button或者BackGround直接遮挡住了整个场景的情况。在不清楚Camera的渲染方式的时候粗暴地去除了BackGround,用SkyBox来带替,作为游戏背景。现在我使用三个Camera,分别为BgCamera,ControlCamera,MainCamera,目标是BackGround最先渲染,然后是游戏场景,最后是ControlUI。而在在Unity3d中的渲染顺序如下:不同Camera的Depth;同Camera下的Layer。

1.同Camera下的Layer

在这里,我创建了两个Canvas,分别用于储存BackGround和ControlUI,并将两个Canvas的Camera都绑为这里的同一个Camera。
这里写图片描述
然后设置两个Canvas的OrderInLayer分别为-10和10,这样的最终结果是:
这里写图片描述
BackGround先渲染,Button后渲染,Button在BackGround上。

2.不同Camera的Depth
这里写图片描述
这里将BgCanvas绑在BgCamera上,ControlCanvas绑在ControlCamera上,Cube则为游戏物体。
设置Camera的ClearFlags为Depth Only,分别设置BgCamera,ControlCamera,MainCamera的Depth为-10,0,10。
可以得到BgCamera最先渲染,然后是MainCamera,最后是ControlCamera:
这里写图片描述
可以得到ControlUI始终在最上层,不会被物体遮挡,而只要将Depth设置为-10,10,0,将得到以下效果:
这里写图片描述
由于物体是最后渲染,所以导致了Button会被Cube遮盖住。

对粒子系统不甚了解,不过想来应该也是差不多的。

原创粉丝点击