这几天在做游戏的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设置的比等待界面大!