UGUI——详解摄像机模式
……
……
摄像机模式是一种很不错的模式。
与覆盖模式不同。
覆盖模式中的UI是后于物体渲染,所以UI总是会覆盖在物体上。
那如果需要让物体覆盖UI呢?
为了解决这个问题。
就需要用到摄像机模式。
摄像机模式怎么去理解呢?
可以这么想。
当使用了摄像机模式后。
就不再是先渲染物体,再渲染UI这种覆盖模式了。
画布会出现在距离摄像机一百米的前方位置,而后unity会根据画布和物体两者距离摄像机的远近来判断是谁遮挡谁。
![](https://img-blog.csdnimg.cn/img_convert/e2b99bd8850616a73aa956c498869300.png)
上方的这个平面距离,其实就是摄像机距离画布的距离。
也就是说,当把渲染模式改成摄像机模式后,画布就会出现在摄像机前方一百米的位置,并且,一旦摄像机移动,画布就会跟着移动。
与此同时。
unity会自动的实现UI和物体的一个遮挡功能。
在摄像机的可视范围内,若是物体在UI的前方,则物体挡住UI;若物体出现在UI的后方,则UI挡住物体。具体怎样,需要通过调整平面距离去设置。
如果想要物体出现在UI前面,把平面距离调大即可。
……
……
当解决了上面的问题之后。
会发现。
如果我们有这样的一个需求怎么办。
什么需求呢?
就是说。
如果我们需要一部分物体出现在UI前面,而另外一部分物体则是出现在UI后面,这种时候怎么办呢?
这种时候,就算去调整平面距离也无济于事了。
就需要另辟蹊径。
另外添加一个专门用来渲染UI的摄像机。
首先把这个新添加的摄像机拖拽到画布的摄像机模式上。
然后就需要把主摄像机的剔除遮罩中的渲染UI给取消掉,如下:
![](https://img-blog.csdnimg.cn/img_convert/8e5e2284e9e1eb06c22558894bfa94b1.png)
而在新添加的摄像机上,就只渲染UI,如下:
![](https://img-blog.csdnimg.cn/img_convert/a4ef7e8a3c6758b8893e9149347c2d48.png)
然而。
这样设置过后。
我们会发现游戏界面显示出来的物体不对劲啊。
还需要设置两个地方才行。
首先是主摄像机和新摄像机的深度,主摄像机的深度一定要比新摄像机低。
我设置的主摄像机深度:
![](https://img-blog.csdnimg.cn/img_convert/69dbd05329e37d328bceecc9c5fa9a90.png)
我设置的新摄像机深度:
![](https://img-blog.csdnimg.cn/img_convert/eb624f234912a11c7ef9a0e81f31a5ca.png)
除了深度的设置外,还需要在新摄像机上设置为仅深度,如下所示。
![](https://img-blog.csdnimg.cn/img_convert/ce46674f2ed84117fec1bfb007b1ad23.png)
当这两个设置都修改完毕后。
就成功了。
会清楚的看到,UI出现在了物体前面。
并且,无论你怎么调整平面距离,UI始终会出现在物体的前面。(这是因为主摄像机的深度为-1,而新摄像机的深度为0,所以主摄像机中的物体会始终的先一步渲染)
可能有的人会想,这不就和覆盖模式一样了吗?
……
……
肯定是不一样的。
还记得前面设置的剔除遮罩吗?
新摄像机只渲染UI。
而画布以及画布里面的内容其实都是属于UI图层的。
所以。
如果需要让一部分物体挡住UI,那么将这一部分物体创建在画布内,这一部分物体就会自动归属于UI图层。
而创建在画布内的物体,就可以被新摄像机捕捉到。
而又因为新摄像机和画布是关联在一起的,也就是说,新摄像机的前方一百米的位置是跟随着一块画布的,所以,创建在画布内的物体,只要在新摄像机前方一百米内,都是可以遮挡住UI的。
而另外一部分被UI挡住的物体,就创建在画布之外即可,这些物体会被主摄像机捕获,并且始终创建在UI之前,所以始终会被UI给挡住。
因此,一部分物体被UI遮挡,一部分物体遮挡UI的功能就实现了。
如下图所示:
![](https://img-blog.csdnimg.cn/img_convert/b48f729190594a65c76f6591c2170137.png)
由图中可以看到。
左上角的层级面板中,我创建的小球是在画布内的。再看右上角的图层,小球也是属于UI图层的。
而其中的红色正方形,则是UI中的一个图像。
最后面的则是一个白色的正方体。
再来梳理一下:
白色的正方体是属于主摄像机的,因为主摄像机包括了除UI以外的所有图层。
而且。
由于主摄像机的深度比新摄像机的深度小,所以主摄像机的白色正方体会先渲染,于是就出现在了最后面。(不管白色正方体距离摄像机多远多近,都会出现在最后面,因为它是最开始渲染的,必定会被挡住)
而红色的正方形是属于UI的,因为UI默认是在距离新摄像机一百米远的位置,而白色小球的距离新摄像机不足一百米远,所以,白色小球会遮挡住红色正方形。
这样一个流程走下来。
就实现了一部分物体挡住UI,一部分物体被UI挡住的功能了。(白色小球挡住红色正方形,白色立方体被红色UI挡住)