unity3d摄像机

主要来自unity3d reference,再加上一些自己的理解

一 概述

摄像头是用于将世界场景投影到屏幕的设备。可以在场景中放置不限数目的摄像机,它们可以设定成任意的渲染次序,渲染到屏幕上的任意地方。

摄 像机实质上是用于将游戏显示给玩家看,它们可以被定制,在上面写脚本或者挂载到其他物体上面以获得想象中的各种效果。对于一个猜谜的游戏,可能只需对游戏 的全部视图保持摄像机静止即可。对于第一人称的射击游戏,常会将摄像机挂载到玩家角色上面,将其放置在角色眼睛的高度。对于一个赛车游戏,可能会让摄像机 跟随赛车。

可以创建多个摄像机,然后为每一个赋予一个不同的深度值。摄像机是从低深度值到高深度值的次序进行绘制,一个深度值为2的摄像机将会在深度值为1的摄像机绘制之后再绘制。同时可以调整Normalized View Port Rect属性来调整摄像机视图在屏幕上的位置大小,使用这个可以创建多个迷你视图。

二 属性

1 clear flags

确定屏幕的哪一部分将被清除。

每个摄像机在渲染它视图的时候都会缓存颜色和深度信息。绘制出来的图像中那部分没有被绘制到的部分是空白的,默认的情况下会显示天空盒的颜色。

当使用多个摄像机的时候,每个都在缓存中存放了它自己的颜色和深度信息,在每个相机渲染的时候会累积更多的数据。在场景中任何特定的摄像机渲染其视图的时候,可以指定清除标志来清除缓存信息中的不同部分。可选项有sky box,solid color,depth only和dont clear。

<1> Skybox

这是清除标志的默认设置。屏幕的任何空白部分都会显示摄像机的天空盒,如何当前摄像机没有设定天空盒,它会默认使用渲染设置中(Eidt->Render Settings)的天空盒。假如默认渲染设置中也没有设定天空盒,它会退而使用背景色。可以选择是否将一个天空盒组件添加到摄像机。

<2> Solid Color

屏幕的任何空白部分都会显示当前摄像机的背景色

<3> Depth Only

如果想要绘制一个玩家的枪而不让它在环境中不被裁剪,可以设定一个深度为0的相机来绘制环境,同时另一个深度为1的相机单独绘制这个武器。武器相机的清除标志应该设置成Depth Only。这会保持环境的图形显示在屏幕上,但是丢弃所有关于每个对象处于3D空间什么位置的信息。当枪被绘制的时候,被绘制出来的不透明部分会完全覆盖现有的被绘制的环境图像,而不管枪离墙壁多近。

为相机使用Depth Only作为清除标志,会使相机仅仅根据相机的深度信息来输出画面,比如相机深度为N的清除标志设为Depth only,那么它的输出会直接覆盖在所有深度小于N的相机输出画面上,而不管在真实的3D环境中,各种对象的z值如何。

<4> Don’t clear

这个模式下不会清除颜色和深度缓存。这会导致下一帧会在上一帧的结果上进行绘制,这个模式在游戏中用得少,一般用于常规的shader中。

不清除的话不过一会屏幕所有的空白区域都会被填满,完全看不出是什么东西。

2 Background

在没有天空盒的时候,当所有的元素绘制完成后剩余屏幕的颜色,即那些没有被元素绘制到的屏幕区域显示的颜色

3 Culling Mask

用于来设定是否剔除处于某一层的对象。Unity场景中的每一个对象,都被分配了一个层,默认为“default”层。打开层级管理器可以看到初始状态下分配了8个层,即0-7层是已经被U3D使用,而”default”处于第0层。

摄像机的Culling Mask的可选项就是这些被使用的层,外加两个完全选项Everthing和Nothing,摄像机Culling Mask的默认选择是Everything,即不剔除任何层,这个时候所有的层也都被选中,如下图

假如现在要隐藏处于Background Image层的对象,只需在该列表中取消勾选Background Image即可。

4 Projection

摄像机的投影方式,有透视投影和正交投影两种。

正交投影:投影线垂直于投影面,也叫平行投影

将摄像机设成正交投影,可以看到它变成了一个立方体

5 Size

当摄像机设成正交投影时,摄像机对应的那个长方体的大小

6 Field of view

视角,透视投影时才有的特性。视角越大,能看到的视野也越大,对应的焦距也越短

7 Clipping Planes

裁剪平面,Near和Far指定了裁剪的区域范围,即在Near-Far范围之内的面将被裁剪掉,不进行渲染。

远近裁剪平面和由Field Of view决定的平面一起构成一个椎体,被称为相机椎体或视椎体,完全处于该椎体之外的物体将会被剔除,这被称为椎体剔除。

8 Normalized viewport rect

指定如何将摄像机的视图绘制到屏幕坐标系上(取值范围为0-1)

X:摄像机视图在屏幕上被绘制的水平初始位置

Y:摄像机视图在屏幕上被绘制的垂直初始位置

W:摄像机视图输出图像占屏幕宽度的比例

H:摄像机视图输出图像占屏幕高度的比例

U3D屏幕的坐标系是以左下角为坐标原点,向右为X轴,向上为Y轴

9 Depth

摄像机在绘制序列中的位置(层级)。有更大深度值的摄像机将会在深度值更小的摄像机上面绘制,即假如两个相机C1和C2,深度值分别为10和8,假如将摄像机设为在场景中可见,则C1会在C2的上层绘制,会把摄像机C2也绘制到图像中

10 Rendering Path

用于指定摄像机使用哪种渲染方法,有下面几种

  • Use Player Settings,摄像机会使用在玩家配置里面指定的渲染路径
  • Vertex Lit,所有被该摄像机渲染的对象都会被渲染成Vertex-Lit对象
  • Forward,所有的对象都会被渲染为一个材质对应一个通道
  • Deferred Lighting,所有的对象在没有光照的情况下绘制一次,然后在渲染队列的末端将所有对象的光照一起绘制,也就是所谓的“延迟光照”技术。

11 Target Texture

可以用于容纳摄像机视图输出的Render Texture对象的引用,设定这个引用将会禁止摄像机将视图绘制到屏幕

12 HDR

启用摄像机的高动态范围渲染(High Dynamic Range Rendering)

三 示例

示例:在屏幕上显示一个2D背景图

做法如下,来自这里

  • 创建一个新的摄像机,取名为”Background Camera”
  • 创建一个新的GUI贴图,取名为”Background Image”
  • 单击Background Image的监视器面板的”Layer”下拉按钮,创建一个新的层,取名为”Background Image”
  • 设置好贴图Background Image的大小和位置,同时将它的层设定为“Background Image”
  • 选中Background Camera,对它的一些属性进行这样的操作:取消勾选Flare Layer和Audio Listener,设定清除标志为Solid Color,设定深度为-1,先将Culling Mask设为nothing,然后设为Background Image
  • 选中主摄像机,设置清除标志为Depth Only,将它的Culling Mask里面的Background Image取消勾选

到 此为止,即设定了一个屏幕的背景贴图。这里先将背景相机的清除标志设置为Solid Color,那么该相机绘图后的空白区域就会填充背景色,让后通过设置Culling Mask使其仅仅显示层”Background Image”,也就是说背景摄像机仅仅绘制背景贴图,空白部分用背景色填充。然后主摄像机设置Culling Mask使其不绘制背景贴图,并且将清除标志设置成Depth Only,因为背景相机的深度为-1,那么主相机的深度就为0,背景相机先进行绘制,然后主相机进行绘制,主相机绘制出来的不透明的部分会完全覆盖在前面 层级相机的图像上,也就是说主相机的绘制结果会直接覆盖到背景贴图上,这就达到了屏幕背景贴图的效果。

假如要进行满屏显示的话,手动调整背景图的大小显然是不实际的,应该使用代码

backgroundGUITexture.pixelInset.width = Screen.width;

backgroundGUITexture.pixelInset.height = Screen.height;

backgroundGUITexture.pixelInset.x = 0;

backgroundGUITexture.pixelInset.y = 0;

但是由于程序运行的时候可能分辨率会发生改变,所以前面的两句应该设置成和分辨率相关的大小

backgroundGUITexture.pixelInset.width = Screen.currentResolution.width;

backgroundGUITexture.pixelInset.height = Screen.currentResolution.height;

时间: 2024-08-06 10:57:37

unity3d摄像机的相关文章

unity3d摄像机参数解释

unity3d摄像机参数 1. Clear Flags:清除标记.决定屏幕的哪部分将被清除.一般用户使用对台摄像机来描绘不同游戏对象的情况,有3中模式选择: Skybox:天空盒.默认模式.在屏幕中的空白部分将显示当前摄像机的天空盒.如果当前摄像机没有设置天空盒,会默认用Background色. Solid Color:纯色.选择该模式屏幕上的空白部分将显示当前摄像机的background色. Depth only:仅深度.该模式用于游戏对象不希望被裁剪的情况. Dont Clear:不清除.该

Unity3D 摄像机(Camera)

在Unity中创建一个Camera后,除了默认带一个Transform组件外,还会附带Flare Layer.GUI Layer.Audio Listener4个组件 ClearFlags:清除标记:决定屏幕中哪部分被清除.一般用于多台摄像机来描绘不同对象的情况,有一下三种模式. Skybox:天空盒(默认项).在屏幕空白处显示当前摄像机的天空盒,如果没有指定天空盒,则会显示默认背景色. Solid Color:如果没有设置天空盒,将默认显示此处设置的背景色. Depth only:仅深度,该模

Unity3D摄像机带透明截图

转载请注明出处:http://www.cnblogs.com/shamoyuu/p/CropCamera.html ↓↓↓下面的废话可以不看↓↓↓ 最近处理了一批我的游戏的图标,步骤特别繁琐, 需要先摆好位置,截图,然后PS处理透明,然后合成到宫格图里, 而且一次只能处理一个,一个就要好几分钟,总共好几十个,后期肯定会有好几百甚至上千个,真是要了命了 然后昨天睡觉前就想,为什么不自动处理呢,我们程序员不就应该懒一点吗 然后就打算写一个,其他的步骤都比较简单,所以这里只放出透明截图的做法. ↓↓↓

Unity3D摄像机尾随人物

这里的镜头主要是从人物的背后尾随的. 首先新建一个C#脚本,命名为MyFollow,然后把下面代码粘贴进去.保存: using UnityEngine; using System.Collections; public class MyFollow : MonoBehaviour { public float distanceAway = 5; // distance from the back of the craft public float distanceUp = 2; // dista

unity3d摄像机参数

1. Clear Flags:清除标记.决定屏幕的哪部分将被清除.一般用户使用对台摄像机来描绘不同游戏对象的情况,有3中模式选择: Skybox:天空盒.默认模式.在屏幕中的空白部分将显示当前摄像机的天空盒.如果当前摄像机没有设置天空盒,会默认用Background色. Solid Color:纯色.选择该模式屏幕上的空白部分将显示当前摄像机的background色. Depth only:仅深度.该模式用于游戏对象不希望被裁剪的情况. Dont Clear:不清除.该模式不清除任何颜色或深度缓

unity3d 摄像机跟随角色时被物体遮挡解决方案

参考文章:http://www.xuanyusong.com/archives/1991 在看此文章时请先看上面的参考文章 看完以上文章后,你也许会想人家都已经给出所有代码了,你还写个毛啊 别急,现在进入主题 在我的项目中,我采用的是物体遮挡作半透明处理,如果按照上述文章中的思路来写代码的话,那么结果就是当多个物体遮挡角色时,只有第一个物体会半透明,如图: 角色被墙和屋顶遮挡住了,但是可以清楚的看见左下角的墙呈半透明状态,而屋顶依旧不透明 为了解决这个问题,我们不采用上述文章中的 physics

unity3d 摄像机抖动特效

摄像机抖动特效 在须要的地方调用CameraShake.Shake()方法就能够

unity3d摄像机入门01

Clear Flags 清除标记 决定屏幕的哪部分将被清除.当使用多个相机来描绘不同的游戏景象时,利用它是非常方便的  Background 背景 在镜头中的所有元素描绘完成且没有天空盒的情况下,将选中的颜色应用到剩余的屏幕  Culling Mask 剔除遮罩 包含或忽略相机渲染对象层.在检视视图中为你的对象指派层Size 大小:正交时Clipping Planes 开始和停止渲染之间的距离.Viewport Rect:表示这个相机的视图将绘制在屏幕的什么地方,使用屏幕坐标系(值0-1).De

Unity3D 摄像机的Transform通过摇杆输出的方向

要解决的问题是:摄像机的方向不固定,当摇杆向前(0,1)推时,主角要往摄像机的朝向(忽略Y方向)走,当摇杆往右(1,0)推的时,主角朝摄像机的右方向 /// <summary> /// 摄像机的Transform通过摇杆输出的方向 /// </summary> /// <param name="t">摄像机的transform</param> /// <param name="dir">摇杆的方向</