杂谈(将模型放在所有UI的最前方)(9)

今天在做一个小项目的时候,出现了一个问题,就是不管我怎样将原本不显示的游戏对象设置为显示,他始终就是不出现,但是在Inspector属性框中真名我的设置是有效的,为什么本该显示的UI不显示呢?我自己总结了两个原因,一个就是自己关于UI的知识不是很扎实,另一个就是出现这种情况的真正原因,即在整个游戏项目中,Unity渲染UI是有顺序的,这个顺序就是 —先渲染的场景在最下面,后绘制的UI场景在最上面,这也就是为什么会出现本身应该显示的场景不显示的原因。
第一种情况:我们想要绘制的顺序是不同类型的
解决方法:
设置Canvas中的canvas组件下的renderMode属性选择Wordspace,点击相机,将摄像机 模型 UI 三者的显示顺序排列出来,或者设置渲染图层的顺序。
在这里插入图片描述
第二种情况:想要粒子在UI上面显示的效果
首先要知道为什么粒子系统为什么不能显示在UI上?原因是系统默认的camera的渲染模式是Space-Overly,在这种模式的渲染下,Canvas在屏幕空间中渲染,会将渲染到的东西放在场景的最前面,这样的话,会遮住除了UI以外的所有物体,而粒子系统是在世界空间中被渲染的,这会受到摄像机的影响,而不是屏幕的空间,而UI的渲染,刚刚说到是在屏幕空间被渲染的,这样的话,不管世界中有没有摄像机,UI都是会被正常渲染,不会受影响,都会正常渲染。
基于此,如果我们想要在UI中渲染粒子,我们就必须要修改摄像机的渲染模式也就是Render Mode,摄像机渲染共有三种模式,一个我们在刚刚已经说过,另外两种渲染模式是Space-Camera、World Space。
那么他们亮哥有什么区别呢
首先说说Space—Camera:在这中模式下,渲染UI需要一个专门的摄像机,在这哥摄像机的渲染下,Canvas的大小不受摄像机和Canvas的大小影响,,能影响的只能是摄像机的Field View的影响,在这种模式下,还有两种效果,分别是透视效果和平时效果,这里不再说明,有兴趣的可以查资料了解,在这种模式下,我们可以想象的到,如果有一个游戏物体放在UI与摄像机中间,那么他就会被渲染到Canvas之前,这样我们就能知道怎样将粒子设置显示到UI之前,第一种方法就是,将粒子设置成Canvas的子对象,第二种方法就是,将粒子放置在比UI离摄像机更近的地方。
然后再来说说World-Space模式:这个模式很好说,就像是吧Canvas变成了一个Plane,只不过里面的Transform依旧是表现成RectTransfoem而已(可能这个解释有点简陋,或许是我的理解不足吧)。
第三种情况:场景中基本都是U元素,我们知道,Camera的渲染是有顺序的,所以如果我们想要吧某一个UI元素放在场景中所有物体的最上面的话,可以将这个物体的深度修改,修改成最后绘制的那个深度,这样,绘制出来的UI就会显示在场景的最上面代码如下

		int count = MakePace.transform.parent.childCount - 1;//Panel移位
        MakePace.transform.SetSiblingIndex(count);//Panel移位

以上只是总结的知识,如果有不对的地方请多指教。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值