• 热门专题

unity3d设置3D模型显示在2D背景之前(多个相机分层显示)

作者:  发布日期:2014-02-11 19:51:49
Tag标签:unity3d  设置  模型  
  •  

    问题说明:

    年前做的web和pc的一个项目,背景当时是用的一个plane然后上面放的是一个带有背景图片的一个材质球,这个通过改变plane的z轴属性是能控制它的显示在3D模型之后,但貌似自适应有点难以控制,当时是用过在界面上手动改变的Scale属性来让背景铺满整个窗口,但无法自适应所有分辨率大小的窗口,然后我就想通过动态代码在plane上添加一个Textrue2D的一个图片,但发现无论怎样拖动模型的z轴属性还是不能让模型显示在背景之前。后来经过一段摸索,搞定,这将摸索过程写下来。

     

    在这里我要提一下MeshRenderer,即网格渲染器,如果我们不勾选这个网格渲染器,在Game场景中是看不到plane的样子的,即网格渲染器将材质渲染出来,材质中包含Texture属性,我们可以选择自己的贴图,也可以选择颜色,网格渲染器就可以将材质中的这些给渲染出来,让我们看到,原来我就是通过这个方法来实现的背景图,下面是另一种添加GUITexture的方法来实现,利用到了多个摄像机共同合作达到效果!

    解决步骤:

    1.添加一个摄像机,命名为BackgroundCamera,然后在Layer添加一个background层。并且将plane拖放到改相机节点下。然后将BackgroundCamera和Plane都置于background层,修改ClearFlags未Depthonly深度渲染,并且设置CullingMask为只看到background层,还有设置Depth为-1,说明背景层是最深,其他model所在的相机的Depth是0,NGUI的是1,这里层次关系就是NGUI在最前面,model层其次,然后是背景层,这样确保3D模型在背景的前面!

    2.同样的操作,将MainCamera设置一下,注意的就是,将MainCamera的CullingMask不能包含background层,也就是让它看不到背景层,不然还是会出现背景遮挡住模型的情况。

    3.在plane上添加一个脚本,用于动态在plane上加载贴图
    using UnityEngine;
    using System.Collections;
    using System.Collections.Generic;
    
    public class AddBackground : MonoBehaviour
    {
        public Texture2D mtexture;
    
        void Awake()
        {
    //        Texture2D mtxture = new Texture2D(Screen.width, Screen.height);
    //        renderer.material.mainTexture = mtxture;
    //        mtxture.Apply();
            
            gameObject.AddComponent();
        }
    
        // Use this for initialization
        void Start()
        {
            guiTexture.texture = mtexture;
            transform.localScale = new Vector3(0, 0, 0);
            transform.localPosition = new Vector3(0, 0, 25);
            guiTexture.pixelInset = new Rect(65, 0, Screen.width, Screen.height);
        }
    }
    上面Start方法中设置position的z轴属性是原来尝试的,想通过z轴来进行深度的修改后来发现行不通,还是层的关系影响渲染的深度。

    4.效果图

     

About IT165 - 广告服务 - 隐私声明 - 版权申明 - 免责条款 - 网站地图 - 网友投稿 - 联系方式
本站内容来自于互联网,仅供用于网络技术学习,学习中请遵循相关法律法规