强化对深度的理解
在老版本的NGUI中,UI的显示层次关系是依靠z轴进行的。在新版本的NGUI中,所有UI的z轴都被统一,然后用深度来决定和管理显示的层次关系。关于深度,要记住一下关键点:
1.每一个UI Panel和每一个UI控件都一定会有一个Depth,深度值大代表显示的优先级高(会越趋向于在界面上层显示)。
2.Depth决定的是UI的显示层级关系,一个UI控件是否显示在最上层是由它所属的Panel的Depth和它本身的Depth决定的。一般情况下,属于低Depth的Panel的控件,不管这个控件本身的Depth为多少,它都将显示在高Depth的Panel的控件后面(被高Depth的Panel遮住)。
3.尽量不要让Panel之间共享同一个Depth,这样会导致性能消耗增加。
4.制作Panel和UI控件时,需要考虑它所属的panel和它自身的Depth是否能让它显示在正确的层次关系上。
小心相机的深度
在场景中的每一个Camera也有一个渲染深度。
NGUI创建时,都会创建一个它独有的相机。这个相机其实就是Unity中普通的Camera,然后为其附加了一个UI Camera的组件。需要注意的是,所有的Camera也都有一个Depth,这个Depth会影响到UI中的Depth,特别是场景有多个Camera来渲染不同层次的UI时,这个影响会比较大。需遵循以下规律:
1.相机的Depth永远是最高级的,也就是高Depth相机所看到的画面,永远在低Depth相机所看到的画面之上。
2.如果需要相机有视觉穿透效果(只渲染所看到的东西,其他地方透掉显示其他相机所看到的画面),需要将相机的ClearFlags设置为DepthOnly。
3.并不是只有负责渲染NGUI的相机的Depth会有影响,所有的相机(比如默认存在的渲染场景的Main Camera)的Dpth都受此规律影响。
4.创建UI时,UI Root下生成的相机默认Depth是比场景中的相机深度高的,不过当场景内有多个摄像机时,一定要管理好每个摄像机的CleraFlags和Depth。
5.当场景内有多个摄像机时,一定要检查摄像机的CullingMask不要渲染重复的Layer,否则可能导致显示双重画面。