UGUI多个Canvas的渲染先后层次关系设置

这几天在做游戏的WindowManager,一开始只是想到打开单一窗口和设置窗口并存的问题,一切运行良好。

但是昨天加了一个等待窗口(沙漏加菊花)之后就出现了问题。

首先说明我的Window的结构:

一个空的GameObject

Canvas

所有的UI控件

举例说:

在登录界面,,点击登录按钮后向服务器发送登录请求,这个时候会显示转菊花的界面,一切OK。

窗口打开顺序为 登录窗口 — 等待窗口

下面的大图就是登录窗口,上面的就是沙漏菊花等待窗口。

这个时候如果再弹出一个其它的界面,比如弹出了一个滚动公告,那按照先后顺序来说,滚动公告就会显示在等待界面之上,这是不行的。

我的目的呢,就是要让等待界面显示在最上面!

首先,从MOMO的博文中了解到,貌似有一个API可以使用,

SetSiblingIndex就是设置 物体在视图中的顺序。

但是实际使用后得出结论,这个API只能调整在同一个Canvas下的UI控件的渲染顺序。对于多个Canvas的不同的窗口而言,这个API没有用处。

于是百度谷歌之,得到一些苗头:

Unity3d中的渲染顺序如下:

不同Camera的Depth

同Camera的soringLayer

同sortingLayer下面的Z轴

但是没有适合我的。

正准备把所有的窗口都由Canvas来管理的时候,看到Canvas下面有一个Sort Order 。

Sort这个词看起来就比较符合口味,排序嘛!

试着把菊花窗口的Sort修改为100,再运行,果然生效!

测试:

先打开等待界面,然后打开登录界面,不设置Sort Order:

可以看到菊花界面无情的被其它界面遮挡住了。

然后

先打开等待界面,再打开其它界面,设置等待界面Canvas的Sort Order为100(因为默认是0,这里可以设置为无限大)

这下就OK了,等待界面永远在其它界面之上了,除非你把其它界面的Sort Order设置的比等待界面大!

成功是奋斗的结果,而奋斗是成功的必经之路。

UGUI多个Canvas的渲染先后层次关系设置

相关文章:

你感兴趣的文章:

标签云: