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

简介:

好一段时间没写博客了,新年来第一天正式上班,新的一年里要求自己有新的变化,坚持每天不断的学习和提高,改变过去的晚睡晚期的不好习惯,昨天周末,利用一天休息时间去打打篮球,发现过去三个月里每天熬夜到深夜,发现体质明显下降,今天起来发现浑身酸痛,得调整一下作息和生活,坚持锻炼,坚持早睡早起,早晨起来每天都坚持看一小时的书,如果每天都坚持在某个时间段固定去学一样东西,时间一长,一周或者一个月甚至一年下来你会惊讶的发现原来你自己学了那么多,贵在坚持,每个人都知道,但真真能做到的人比较少,如果能做到这点,就算将来即便成不了大牛那也是一直走在成为大牛做过的路上,也会受益匪浅,我写上这个也是自我勉励,另一方面也是大家共勉,生活上,学习上的点点滴滴总是那么神奇,过去未知答案时所走出的道路在未来的这天,发觉将其串联起来,现在所走的路不知道是何路,但必是将来通向未来之路,因不满足于现状,觉得可以做的更好,所以,通过不断的努力,去改变现状,一直不想当一个井底之蛙,IT技术上更是如此,如果仅仅是安于现状,那永远是跟不上时代的步伐,只会不进则退。不知何时开始,我有了自己的追求,有一股劲儿,一直想做的更好,学的更多,相信有一天能成为一个参天大树。假如抛开一切的负担,你最在乎的是什么?或者说你最想做的事是什么?燃气你的激情,为理想而奋斗。实现理想的过程是艰辛的,但如果一旦实现,发现时甜蜜的,理想or梦想,但他们不是梦,并不是遥不可及,用燃烧不进的激情,追随她~ 不要让自己迷失方向,安于现状,不要冷漠了任何事物,她总会有她神奇的一面,不断的挖掘,相信你都会有人家体会不到的收获,好奇心,永远保持一颗好奇心!以上是算给自己新年鼓鼓气,接下来还是要落地,写写今天的收获!

问题说明:

年前做的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<GUITexture>();     }      // 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.效果图


==================== 迂者 丁小未 CSDN博客专栏=================

MyBlog:http://blog.csdn.net/dingxiaowei2013             MyQQ:1213250243

Unity QQ群:858550         cocos2dx QQ群:280818155

====================== 相互学习,共同进步 ===================


















本文转蓬莱仙羽51CTO博客,原文链接:http://blog.51cto.com/dingxiaowei/1366126,如需转载请自行联系原作者
相关文章
|
4月前
|
C# 图形学
【Unity】2D游戏-愤怒的小鸟教学实战(附源码和实现步骤 超详细)
【Unity】2D游戏-愤怒的小鸟教学实战(附源码和实现步骤 超详细)
119 1
|
10月前
|
存储 图形学 Android开发
【游戏开发】使用unity创建2D游戏
Unity是一种非常强大的游戏引擎,可以帮助你创建各种类型的游戏,包括2D游戏。在本文中,我们将教你如何使用Unity创建2D游戏。首先,你需要确保你已经下载并安装了最新版本的Unity。如果你还没有安装Unity,可以从官方网站下载免费的Unity Hub来管理你的Unity版本。
388 0
|
10月前
|
前端开发 定位技术 图形学
【Ruby 2D】【unity learn】抬头显示血条
【Ruby 2D】【unity learn】抬头显示血条
|
10月前
|
机器人 图形学 Ruby
【unity learn】【Ruby 2D】角色发射飞弹
【unity learn】【Ruby 2D】角色发射飞弹
|
10月前
|
机器人 图形学 Ruby
【Ruby 2D】【unity learn】控制敌人随机运动以及动画控制
【Ruby 2D】【unity learn】控制敌人随机运动以及动画控制
|
10月前
|
编译器 API 图形学
【unity细节】基于unity子对象(如相机)为什么无法进行z轴的拖拽移动和z轴自动归位的问题
【unity细节】基于unity子对象(如相机)为什么无法进行z轴的拖拽移动和z轴自动归位的问题
115 0
|
存储 安全 C#
从零开始做一款Unity3D游戏<二>——移动,相机控制与碰撞(二)
从零开始做一款Unity3D游戏<二>——移动,相机控制与碰撞
从零开始做一款Unity3D游戏<二>——移动,相机控制与碰撞(二)
|
存储 传感器 C#
从零开始做一款Unity3D游戏<二>——移动,相机控制与碰撞(一)
从零开始做一款Unity3D游戏<二>——移动,相机控制与碰撞
从零开始做一款Unity3D游戏<二>——移动,相机控制与碰撞(一)
|
图形学 Windows
Unity报错之 No Sprite Editor Window registered. Please download 2D Sprite package from Package Manager
Unity2019操作对图集进行操作编辑出错:No Sprite Editor Window registered. Please download 2D Sprite package from Package Manager.
1054 0
Unity报错之 No Sprite Editor Window registered. Please download 2D Sprite package from Package Manager
|
机器人 图形学 Ruby
【Unity开发实战】—— 2D项目1 - Ruby‘s Adventure 游戏中动画制作(4-1)
【Unity开发实战】—— 2D项目1 - Ruby‘s Adventure 游戏中动画制作(4-1)
202 0
【Unity开发实战】—— 2D项目1 - Ruby‘s Adventure 游戏中动画制作(4-1)