【Unity】2.8 相机(Camera)

分类:Unity、C#、VS2015 数组

建立日期:2016-03-31 缓存

1、简介

Unity的相机用来向玩家呈现游戏世界。你在场景中始终至少有一个相机,但也能够有多个。多个相机能够带给您双人分屏效果或建立高级的自定义效果。您可让相机动起来,或者用物理(组件)控制它们。您能想到的任何东西,几乎均可以经过相机变成可能,为了配合您的游戏风格,还可使用典型或独特的相机。 函数

相机 (Camera)是为玩家捕捉并展现世界的一种设备。经过自定义和操做相机,可使您的游戏演示真正不同凡响。您能够在一个场景中使用无数台相机。这些相机能够设置为在屏幕的任何位置或只在某些部分按任何顺序进行渲染。 性能

image

2、属性

要将游戏呈现给玩家,相机是必不可少的。能够对相机进行自定义、脚本化或父子化,从而实现能够想到的任何效果。在拼图游戏中,可让相机 (Camera) 处于静止状态,以看到拼图的全视图。在第一人称射击游戏中,能够将相机 (Camera) 父子化至玩家角色,并将其放置在与角色眼睛等高的位置。在竞速游戏中,您可能但愿让相机追随玩家的车辆。 设计

您能够建立多个相机 (Camera),并为每台相机指定不一样的深度 (Depth)。 相机按照低深度 (Depth) 到高深度 (Depth) .进行绘制。换而言之,深度 (Depth) 为 2 的相机 (Camera) 会绘制在深度为 1 的相机上方。您能够调节规范化视口矩形 (Normalized View Port Rectangle) 的属性值改变相机 (Camera) 在屏幕上的视图大小和位置。这样能够建立多个像导弹相机、地图视图、后视镜等这样的微视图。 3d

一、清除标记 (Clear Flags) orm

肯定要清除屏幕的哪些部分。在使用多台“相机”(Camera) 绘制不一样游戏元素时会很方便。 对象

二、背景 (Background) blog

在将视线内的全部元素都绘制好且无天空盒以后应用于剩余屏幕的颜色。 队列

三、剔除遮蔽图 (Culling Mask)

添加或删除“相机”(Camera) 渲染的对象层。在检视器 (Inspector) 中为对象分配层。

四、投影 (Projection)

切换相机的模拟透视功能。

五、透视 (Perspective)

相机将用彻底透视的方式来渲染对象。即:近看远看的效果不同。

六、正交 (Orthographic)

相机将用无透视感的渲染方法均匀渲染对象。即:近看远看效果都同样。

七、大小 (Size)(选择“正交”(Orthographic) 时)

设置为正交 (Orthographic) 时相机视口的大小。

八、视野 (Field of View)(选择“透视”(Perspective) 时)

“相机”(Camera) 视角的宽度,沿局部坐标的 Y 轴进行测量(以度为单位)。

九、裁剪平面 (Clipping Planes)

相机到开始渲染和中止渲染的距离。

十、近点 (Near)

即将绘制时距离相机最近的点。

十一、远点 (Far)

即将绘制时距离相机最远的点。

十二、规范化视口矩形 (Normalized View Port Rect)

表示该相机视图在屏幕上的绘制位置的四个值,在屏幕坐标 (Screen Coordinates) 中(值 0 到 1)。

1三、X、Y

绘制相机视图的水平起始位置、垂直起始位置。

1四、W、H

相机输出到屏幕上的宽度、高度。

1五、深度 (Depth)

相机在绘图顺序中的位置。拥有较大值的相机将会绘制在拥有较小值相机之上。

1六、渲染路径 (Rendering Path)

定义相机使用什么渲染方法的选项。

1七、使用玩家设置 (Use Player Settings)

该相机将使用玩家设置 (Player Settings) 中设定的任意一个渲染路径 (Rendering Path)。

1八、顶点光照 (Vertex Lit)

该相机渲染的全部对象都将做为顶点光照 (Vertex-Lit) 的对象来渲染。

1九、正向渲染 (Forward)

全部对象都将按每种材质一个通道的方式进行渲染。

20、延时光照 (Deferred Lighting)(仅限 Unity 专业版)

全部对象都将无照明绘制一次,而后全部对象的照明都将在渲染队列末端一块儿渲染。

2一、目标纹理 (Target Texture) (仅限 Unity 专业版)

参考将包含“相机”(Camera) 视图输出的渲染纹理 。该引用将禁用相机 (Camera) 的屏幕渲染功能。

2二、高动态范围 (HDR)

启用该相机的高动态范围 (High Dynamic Range) 渲染。

3、基本概念

一、渲染路径

Unity 支持不一样的渲染路径 (Rendering Path)。您应该根据游戏内容和目标平台/硬件进行选择。不一样的渲染路径有不一样的功能和性能特色,这些功能和性能特色主要影响灯光 (Lights) 和阴影 (Shadows)。

您能够在“玩家设置”(Player Settings) 中选择项目使用的渲染路径 (Rendering Path)。此外,您能够为每一个相机 (Camera) 覆盖渲染路径。

有关渲染路径的更多信息,请查看看渲染路径页面。

二、清除标记

每台相机 (Camera) 在渲染视图时储存颜色和深度信息。没有绘制的屏幕是空白的,在默认状态下会显示天空盒。使用多个相机 (Camera) 时,每一个相机都会在缓存区储存各自的颜色和深度信息,并在渲染时累积更多数据。当场景中的任何相机渲染视图时,能够设置清除标记 (Clear Flags) 以清除缓存区信息中不一样的收集数据。能够经过如下四个选项之一来完成:

三、天空盒

这是默认设置。屏幕上全部空白部分都将显示当前相机 (Camera) 的天空盒。若是当前相机 (Camera) 没有设置天空盒,则会默认为渲染设置 (编辑 (Edit) -> 渲染设置 (Render Settings))) 中所选的天空盒。以后会回到也可为相机添加背景颜色 (Background Color)。也可为相机添加天空盒组件 。若是要建立新的天空盒 (Skybox),请使用该向导。

四、纯色

屏幕上全部空白部分都将显示当前相机 (Camera) 的背景背景颜色 (Background Color)。

五、深度模式

若是要绘制玩家的枪而又不让其在环境中被裁剪掉,能够将深度 (Depth)为 0 的相机 (Camera) 设置用于绘制环境,而另外一个深度 (Depth)为 1 的相机用于单独绘制武器清除标记 (Clear Flags) 应设置为深度模式 (depth only)。这将使得环境图像一直显示在屏幕上,但会丢掉每一个对象在三维空间中的位置的全部信息。枪绘制完后,不透明部分将彻底覆盖全部已绘制部分,不管枪与墙的距离有多近。

image

清除完相机前的深度缓存后,枪的绘制便完成了。

六、不清除

该模式既不清除颜色,也不清除深度缓存。其结果是,每帧绘制在下一帧之上,造成拖影效果。这在游戏中不经常使用,最好是与自定义着色器一同使用。

七、裁剪平面

近、远剪裁平面 (Clip Plane) 属性决定了相机 (Camera) 视图的开始位置和结束位置。这两个平面与相机 (Camera) 方向垂直,并从相机位置开始度量。 近平面 (Near plane) 平面是即将渲染的最近位置,而远平面 (Far plane) 平面是最远位置。

裁剪平面还决定了深度缓存精度如何在场景上分布。通常而言,为了获得更高的精度,应该将近平面 (Near plane) 平面移得尽量远。

请注意:近、远裁剪平面和相机视野肯定的平面一块儿构成的区域就是俗称的相机平截头体 (frustum)。Unity 确保在您渲染对象时,那些彻底在这个平截头体以外的对象将不会显示。这称之为平截头体剔除 (Frustum Culling)。不管您的游戏中是否使用了遮挡剔除 (Occlusion Culling),都会出现平截头体剔除 (Frustum Culling)。

For出于性能缘由,您可能须要尽早剔除小对象。例如,与大型建筑相比,小石块和碎片能够在短得多的距离内不可见。要作到这一点,将小对象放在隔离层中并用 Camera.layerCullDistances 脚本函数设置每一层的剔除距离。

八、剔除遮蔽图

剔除遮蔽图使用层来选择性地渲染数组对象。有关层的使用的更多信息,请点 这里。

一般较好的作法是,将用户界面 (User Interface) 放在不一样的层上,而后使其自我渲染,同时用独立的相机 (Camera) 渲染用户界面层。

为了使 UI 在其余相机 (Camera) 视图上方显示,您还须要将清除标记 (Clear Flags) 设置为深度模式 (Depth only) ,并确保 UI 相机 (Camera) 的深度 (Depth) 高于其余相机 (Camera)。

九、规范化视口矩形

规范化视口矩形 (Normalized Viewport Rectangles) 专门用于定义当前相机视图绘制在屏幕上的哪一部分。您能够在屏幕右下角放置地图视图,或者在左上角放置弹头视图。只需一点设计,您就能够利用 视口矩形 (Viewport Rectangle) 建立一些独特的行为。

使用规范化视口矩形 (Normalized Viewport Rectangle)可轻松建立双人分屏效果。建立两个相机后,将两个相机的 H 值都改为 0.5,而后将玩家甲的 Y 值设为 0.5,玩家乙的 Y 值设为 0。这样,玩家甲的相机将从屏幕中间向上显示,而玩家乙的相机将从底部开始并在屏幕中间中止。

下图是使用规范化视口矩形 (Normalized Viewport Rectangle) 建立的双人显示:

image

十、正交

将相机 (Camera) 设置为正交 (Orthographic) 会去掉相机视图中的全部透视效果。这在制做等距或二维游戏时很是有用。

请注意:雾是使用正交相机模式均匀渲染的,所以可能得不到期待的效果。有关上述缘由的更多信息,请参阅渲染设置组件参考。

image

十一、透视相机

正交相机。这里的对象不会因距离远而变小!

image

十二、渲染纹理

只有 Unity 高级版才能使用此功能。该功能能够将相机视图放在能够应用于另外一个对象的纹理上。这使得建立体育场大屏幕、监控摄像机和倒影等变得简单。

下图是用于建立直播现场相机的渲染纹理 (Render Texture):

image

提示

• 相机能够像其余任何游戏对象 (GameObject) 同样被实例化、父子化和脚本化。

• 要想增长竞速游戏的速度感,请使用大视野 (Field of View)。

• 若是添加了刚体 (Rigidbody) 组件 (Component),相机即可用于物理模拟。

• 场景中使用的相机数量没有限制。

• 正交相机很是适合制做 3D 用户界面

• 若是遇到深度假象(相邻面忽隐忽现),请尝试将近平面 (Near Plane) 设置得尽量大。

• 相机不能同时渲染游戏屏幕 (Game Screen) 和渲染纹理 (Render Texture),其只能渲染其中一个。

• 专业许可证持有者能够选择将相机视图渲染到纹理,该选项称为“渲染到纹理”(Render-to-Texture)。经过该选项可得到更加独特的效果。

• Unity 带有预先安装的相机 (Camera) 脚本,您能够经过 组件 (Component) -> 相机控制 (Camera Control) 找到。使用它们来体验一下无限的可能性吧。

相关文章
相关标签/搜索