摄像的渲染层的概念
Unity中,每一个物体都有一个所处的“层”的概念,也就是物体的Layer,而摄像机中可以通过设置CullingMask来决定该摄像机只渲染哪些层的物体。对于UI来说,这个原理也一样使用,因为NGUI的每一个控件元素,本质上都属于一个GameObject,都有自己的层;每一个UI Root都会自带一个UI Camera来渲染UI。
利用这个原理,可以实现多个摄像机来进行UI的渲染,例如,场景里可以放置一个3D摄像机负责渲染3D UI,还可以放置一个2D摄像机,负责渲染2D UI等。理论上来说可以放置无限多个摄像机来分别渲染不同层的内容。
当场景中有两个摄像机都会渲染同一个层的时候,会造成画面重复显示。
多摄像机协作的应用范围
因为Unity中很多元素不适合和UI控件放在一起进行显示,比如粒子、比如3D的模型。例如,在UI中显示一个3D模型,一般就会使用一个UI摄像机来负责渲染UI控件,用另一个摄像机来渲染3D模型,然后让这两个摄像机渲染的内容进行叠加,呈现出一幅完整的UI图像。
如何创建多个UI摄像机
在NGUI中,如果创建了一个UI Root,当再点开Unity顶部的NGUI菜单,企图通过Create菜单去创建一个新的UI时,会发现创建UI的选项已经变成灰色,无法再创建,这是因为NGUI默认只允许场景中出现一个UI Root。
要创建多个UI摄像机时,首先得考虑是否需要UI Root,如果有UI图片做成的控件,需要被UI Root根据屏幕自动进行缩放,那么就需要一个UI Root来管理这些UI控件。
为了创建多个UI Root(每个UI Root会自带一个UI摄像机),可以关闭场景中已经存在的UI Root物体的UI Root组件,然后再单击Unity顶部NGUI菜单通过Create创建。
如果不需要的多个UI Root,只需要一个新的UI Camera,那么可以在场景中新创建一个摄像机,创建方式为,在Unity顶部菜单单击GameObject,选择Create创建一个。
然后在这个新创建的摄像机上附上一个UI Camera组件即可,组件附加方法可以在Inspector面板中依次单击AddComponent->NGUI->EventSystem(UI Camera)。如果它渲染的物体不需要接收UI的事件(如单击拖拽等),这个UI Camera组件就没有必要附上。
多摄像机协作的注意事项
(1)规划并设置好每个物体的Layer,不要混乱。
(2)设置好每个摄像机的CullingMask,确保场景中的摄像机之间不会重复渲染同一层。
(3)对于多个UI Root的情况,更要检查它们所属的层和该UI Root渲染的层是否对应。
(4)尽量不要滥用多摄像机协作。