【Unity】2.8 相机(Camera)
分类:Unity、C#、VS2015
创建日期:2016-03-31
一、简介
Unity的相机用来向玩家呈现游戏世界。你在场景中始终至少有一个相机,但也可以有多个。多个相机可以带给您双人分屏效果或创建高级的自定义效果。您可以让相机动起来,或者用物理(组件)控制它们。您能想到的任何东西,几乎都可以通过相机变成可能,为了配合您的游戏风格,还可以使用典型或独特的相机。
相机 (Camera)是为玩家捕捉并展示世界的一种设备。通过自定义和操作相机,可以使您的游戏演示真正与众不同。您可以在一个场景中使用无数台相机。这些相机可以设置为在屏幕的任何位置或只在某些部分按任何顺序进行渲染。
二、属性
要将游戏呈现给玩家,相机是必不可少的。可以对相机进行自定义、脚本化或父子化,从而实现可以想到的任何效果。在拼图游戏中,可以让相机 (Camera) 处于静止状态,以看到拼图的全视图。在第一人称射击游戏中,可以将相机 (Camera) 父子化至玩家角色,并将其放置在与角色眼睛等高的位置。在竞速游戏中,您可能希望让相机追随玩家的车辆。
您可以创建多个相机 (Camera),并为每台相机指定不同的深度 (Depth)。 相机按照低深度 (Depth) 到高深度 (Depth) .进行绘制。换而言之,深度 (Depth) 为 2 的相机 (Camera) 会绘制在深度为 1 的相机上方。您可以调节规范化视口矩形 (Normalized View Port Rectangle) 的属性值改变相机 (Camera) 在屏幕上的视图大小和位置。这样可以创建多个像导弹相机、地图视图、后视镜等这样的微视图。
1、清除标记 (Clear Flags)
确定要清除屏幕的哪些部分。在使用多台“相机”(Camera) 绘制不同游戏元素时会很方便。
2、背景 (Background)
在将视线内的所有元素都绘制好且无天空盒之后应用于剩余屏幕的颜色。
3、剔除遮蔽图 (Culling Mask)
添加或删除“相机”(Camera) 渲染的对象层。在检视器 (Inspector) 中为对象分配层。
4、投影 (Projection)
切换相机的模拟透视功能。
5、透视 (Perspective)
相机将用完全透视的方式来渲染对象。即:近看远看的效果不一样。
6、正交 (Orthographic)
相机将用无透视感的渲染方法均匀渲染对象。即:近看远看效果都一样。
7、大小 (Size)(选择“正交”(Orthographic) 时)
设置为正交 (Orthographic) 时相机视口的大小。
8、视野 (Field of View)(选择“透视”(Perspective) 时)
“相机”(Camera) 视角的宽度,沿局部坐标的 Y 轴进行测量(以度为单位)。
9、裁剪平面 (Clipping Planes)
相机到开始渲染和停止渲染的距离。
10、近点 (Near)
即将绘制时距离相机最近的点。
11、远点 (Far)
即将绘制时距离相机最远的点。
12、规范化视口矩形 (Normalized View Port Rect)
表示该相机视图在屏幕上的绘制位置的四个值,在屏幕坐标 (Screen Coordinates) 中(值 0 到 1)。
13、X、Y
绘制相机视图的水平起始位置、垂直起始位置。
14、W、H
相机输出到屏幕上的宽度、高度。
15、深度 (Depth)
相机在绘图顺序中的位置。拥有较大值的相机将会绘制在拥有较小值相机之上。
16、渲染路径 (Rendering Path)
定义相机使用什么渲染方法的选项。
17、使用玩家设置 (Use Player Settings)
该相机将使用玩家设置 (Player Settings) 中设定的任意一个渲染路径 (Rendering Path)。
18、顶点光照 (Vertex Lit)
该相机渲染的所有对象都将作为顶点光照 (Vertex-Lit) 的对象来渲染。
19、正向渲染 (Forward)
所有对象都将按每种材质一个通道的方式进行渲染。
20、延时光照 (Deferred Lighting)(仅限 Unity 专业版)
所有对象都将无照明绘制一次,然后所有对象的照明都将在渲染队列末端一起渲染。
21、目标纹理 (Target Texture) (仅限 Unity 专业版)
参考将包含“相机”(Camera) 视图输出的渲染纹理 。该引用将禁用相机 (Camera) 的屏幕渲染功能。
22、高动态范围 (HDR)
启用该相机的高动态范围 (High Dynamic Range) 渲染。
三、基本概念
1、渲染路径
Unity 支持不同的渲染路径 (Rendering Path)。您应该根据游戏内容和目标平台/硬件进行选择。不同的渲染路径有不同的功能和性能特点,这些功能和性能特点主要影响灯光 (Lights) 和阴影 (Shadows)。
您可以在“玩家设置”(Player Settings) 中选择项目使用的渲染路径 (Rendering Path)。此外,您可以为每个相机 (Camera) 覆盖渲染路径。
有关渲染路径的更多信息,请查看看渲染路径页面。
2、清除标记
每台相机 (Camera) 在渲染视图时储存颜色和深度信息。没有绘制的屏幕是空白的,在默认状态下会显示天空盒。使用多个相机 (Camera) 时,每个相机都会在缓存区储存各自的颜色和深度信息,并在渲染时累积更多数据。当场景中的任何相机渲染视图时,可以设置清除标记 (Clear Flags) 以清除缓存区信息中不同的收集数据。可以通过以下四个选项之一来完成:
3、天空盒
这是默认设置。屏幕上所有空白部分都将显示当前相机 (Camera) 的天空盒。如果当前相机 (Camera) 没有设置天空盒,则会默认为渲染设置 (编辑 (Edit) -> 渲染设置 (Render Settings))) 中所选的天空盒。之后会回到也可为相机添加背景颜色 (Background Color)。也可为相机添加天空盒组件 。如果要创建新的天空盒 (Skybox),请使用该向导。
4、纯色
屏幕上所有空白部分都将显示当前相机 (Camera) 的背景背景颜色 (Background Color)。
5、深度模式
如果要绘制玩家的枪而又不让其在环境中被裁剪掉,可以将深度 (Depth)为 0 的相机 (Camera) 设置用于绘制环境,而另一个深度 (Depth)为 1 的相机用于单独绘制武器清除标记 (Clear Flags) 应设置为深度模式 (depth only)。这将使得环境图像一直显示在屏幕上,但会丢掉每个对象在三维空间中的位置的所有信息。枪绘制完后,不透明部分将完全覆盖所有已绘制部分,无论枪与墙的距离有多近。
清除完相机前的深度缓存后,枪的绘制便完成了。
6、不清除
该模式既不清除颜色,也不清除深度缓存。其结果是,每帧绘制在下一帧之上,形成拖影效果。这在游戏中不常用,最好是与自定义着色器一同使用。
7、裁剪平面
近、远剪裁平面 (Clip Plane) 属性决定了相机 (Camera) 视图的开始位置和结束位置。这两个平面与相机 (Camera) 方向垂直,并从相机位置开始度量。 近平面 (Near plane) 平面是即将渲染的最近位置,而远平面 (Far plane) 平面是最远位置。
裁剪平面还决定了深度缓存精度如何在场景上分布。一般而言,为了得到更高的精度,应该将近平面 (Near plane) 平面移得尽可能远。
请注意:近、远裁剪平面和相机视野确定的平面一起构成的区域就是俗称的相机平截头体 (frustum)。Unity 确保在您渲染对象时,那些完全在这个平截头体之外的对象将不会显示。这称之为平截头体剔除 (Frustum Culling)。无论您的游戏中是否使用了遮挡剔除 (Occlusion Culling),都会出现平截头体剔除 (Frustum Culling)。
For出于性能原因,您可能需要尽早剔除小对象。例如,与大型建筑相比,小石块和碎片可以在短得多的距离内不可见。要做到这一点,将小对象放在隔离层中并用 Camera.layerCullDistances 脚本函数设置每一层的剔除距离。
8、剔除遮蔽图
剔除遮蔽图使用层来选择性地渲染数组对象。有关层的使用的更多信息,请点 这里。
通常较好的做法是,将用户界面 (User Interface) 放在不同的层上,然后使其自我渲染,同时用独立的相机 (Camera) 渲染用户界面层。
为了使 UI 在其他相机 (Camera) 视图上方显示,您还需要将清除标记 (Clear Flags) 设置为深度模式 (Depth only) ,并确保 UI 相机 (Camera) 的深度 (Depth) 高于其他相机 (Camera)。
9、规范化视口矩形
规范化视口矩形 (Normalized Viewport Rectangles) 专门用于定义当前相机视图绘制在屏幕上的哪一部分。您可以在屏幕右下角放置地图视图,或者在左上角放置弹头视图。只需一点设计,您就可以利用 视口矩形 (Viewport Rectangle) 创建一些独特的行为。
使用规范化视口矩形 (Normalized Viewport Rectangle)可轻松创建双人分屏效果。创建两个相机后,将两个相机的 H 值都改成 0.5,然后将玩家甲的 Y 值设为 0.5,玩家乙的 Y 值设为 0。这样,玩家甲的相机将从屏幕中间向上显示,而玩家乙的相机将从底部开始并在屏幕中间停止。
下图是使用规范化视口矩形 (Normalized Viewport Rectangle) 创建的双人显示:
10、正交
将相机 (Camera) 设置为正交 (Orthographic) 会去掉相机视图中的所有透视效果。这在制作等距或二维游戏时非常有用。
请注意:雾是使用正交相机模式均匀渲染的,因此可能得不到期待的效果。有关上述原因的更多信息,请参阅渲染设置组件参考。
11、透视相机
正交相机。这里的对象不会因距离远而变小!
12、渲染纹理
只有 Unity 高级版才能使用此功能。该功能可以将相机视图放在可以应用于另一个对象的纹理上。这使得创建体育场大屏幕、监控摄像机和倒影等变得简单。
下图是用于创建直播现场相机的渲染纹理 (Render Texture):
提示
• 相机可以像其他任何游戏对象 (GameObject) 一样被实例化、父子化和脚本化。
• 要想增加竞速游戏的速度感,请使用大视野 (Field of View)。
• 如果添加了刚体 (Rigidbody) 组件 (Component),相机便可用于物理模拟。
• 场景中使用的相机数量没有限制。
• 正交相机非常适合制作 3D 用户界面
• 如果遇到深度假象(相邻面忽隐忽现),请尝试将近平面 (Near Plane) 设置得尽可能大。
• 相机不能同时渲染游戏屏幕 (Game Screen) 和渲染纹理 (Render Texture),其只能渲染其中一个。
• 专业许可证持有者可以选择将相机视图渲染到纹理,该选项称为“渲染到纹理”(Render-to-Texture)。通过该选项可获得更加独特的效果。
• Unity 带有预先安装的相机 (Camera) 脚本,您可以通过 组件 (Component) -> 相机控制 (Camera Control) 找到。使用它们来体验一下无限的可能性吧。