【基础】Unity中背景、3D object、NGUI控件共存
大部分U3D的游戏开发中都需要用NGUI这款界面控件,NGUI如何和3D物体共存是刚使用U3D时最常问的问题。
笔者在当前的项目中还需要加入一个背景图片,因此这里将方法统一讲一下,层次结构需求是:背景图片(底)——3D物体(中)——NGUI控件(顶)
以下是过程:
1.先来考虑3D物体和NGUI的共存,那么首先New一个场景
2.先不管Main Camera,我们来设置NGUI部分,Create一个2D UI,再拖一个NGUI的Button进去。
Create一个Cube表示场景中的3D物体,为了层次清晰,我们把Cube放到Main Camera中,Main Camera下都放3D Object, UI Root下都是NGUI控件。
然后再打一个光,让3D物体清晰点,效果如下:
3. 现在乍一看似乎效果还不错,但是会发现如果NGUI的面板也处于Main Camera的视野中,就会看到两个Button,因此我们设置一下Layer, 让UI Root在UI层, MainCamera下的保持在Default即可
然后将Main Camera的Culling Mask中的UI层去掉,这样Main Camera就看不到UI层的NGUI控件了,NGUI控件只让其自带的Camera来Render,另外方便之后的设置,将Main Camera的Clear Flags设置成Depth only,这样摄像机的层次结构就可以出来了
3D物体是在中间层,因此这里Main Camera的Depth设置成0,UI Root中的Camera Depth设为1(最顶层),Depth就是渲染的顺序,越大越后渲染。
至此,3D物体和NGUI控件已经共存合理了,移动下3D物体可以发现NGUI控件始终盖在上面
4. 接下来再设置背景图片,再create一个Camera,命名为bgCamera,再新建一个layer, bg层(如何新建layer是基本操作这里就不讲了),将bgCamera划入bg层
5.create一个panel,用来之后做背景图片,调节位置角度(在bgCamera的视野范围内),同样划入bg Layer,并且放到bgCamera下
6.接下来类似的设置下bgCamera
depth设为-1(最底层)
7.此时多了一个bg层,记得去Main Camera那里将bg层也去掉
8.至此,场景上的设置就结束了,那么要有一个背景,而往往背景是需要动态捕获屏幕分辨率从而来填满整个界面的,因此这里笔者采用脚本添加的方式,在plane上添加一个新脚本BG.cs,脚本内容如下:
1 using UnityEngine; 2 using System.Collections; 3 4 public class BG : MonoBehaviour { 5 //背景贴图 6 public Texture2D bgTexture; 7 // Use this for initialization 8 void Start () { 9 gameObject.AddComponent<GUITexture>(); 10 } 11 12 // Update is called once per frame 13 void Update () { 14 guiTexture.texture = bgTexture; 15 transform.localScale = new Vector3(0, 0, 0); 16 transform.position = new Vector3(0, 0, 0); 17 guiTexture.pixelInset = new Rect(0, 0, Screen.width, Screen.height); 18 } 19 }
然后将需要的贴图赋给这个公共变量
9.运行一下看看效果:
10.效果完成了, 最后再调整一个细节,就是多个camera上都绑定了一个Audio Listener 和Flare Layer, 只需留下一个即可,可以选择将bgCamera和UI Root下Camera的 这两个勾去掉
大功告成了,呼呼,看起来比较长,其实只要理解了Depth渲染的理念,就很容易设置了,比较基础的讲解,有不明白的朋友也可以在下面评论,笔者会抽空回答,谢谢支持!
Cowill
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。