__摄像机__是为玩家捕捉和展示世界的设备。通过自定义和操纵摄像机,您可以让自己的游戏呈现出真正的独特性。在场景中可拥有无限数量的摄像机。这些摄像机可设置为以任何顺序在屏幕上任何位置或仅在屏幕的某些部分进行渲染。
根据项目使用的渲染管线,Unity 在 Camera Inspector 中显示不同的属性。
属性: | 功能: |
---|---|
Clear Flags | 确定将清除屏幕的哪些部分。使用多个摄像机来绘制不同游戏元素时,这会很方便。 |
Background | 在绘制视图中的所有元素之后但没有天空盒的情况下,应用于剩余屏幕部分的颜色。 |
Culling Mask | 包含或忽略要由摄像机渲染的对象层。在检视面板中将层分配到对象。 |
Projection | 切换摄像机模拟透视的功能。 |
Perspective | 摄像机将以完整透视角度渲染对象。 |
Orthographic | 摄像机将均匀渲染对象,没有透视感。注意:在正交模式下不支持延迟渲染。始终使用前向渲染。 |
Size__(选择 Orthographic 时) |设置为 Orthographic 时摄像机的视口大小。 | |FOV Axis__(选择 Perspective 时) | 视野轴。 |
Horizontal | 摄像机使用水平视野轴。 |
Vertical | 摄像机使用垂直视野轴。 |
Field of view__(选择 Perspective 时) |摄像机视角(以沿着 FOV Axis__ 下拉选单中指定轴的度数为单位)。 | |
Physical Camera | 勾选此复选框可为此摄像机启用 Physical Camera 属性。 启用 Physical Camera 属性后,Unity 将使用模拟真实摄像机属性的属性(Focal Length、Sensor Size 和 Lens Shift)计算 Field of View。 在勾选此复选框之前,Physical Camera 属性不会显示在 Inspector 中。 |
Focal Length | 设置摄像机传感器和摄像机镜头之间的距离(以毫米为单位)。 较小的值产生更宽的 Field of View,反之亦然。 更改此值时,Unity 会相应自动更新 Field of View 属性。 |
Sensor Type | 指定希望摄像机模拟的真实摄像机格式。从列表中选择所需的格式。 选择摄像机格式时,Unity 会自动将 Sensor Size > X 和 Y 属性设置为正确的值。 如果手动更改 Sensor Size 值,Unity 会自动将此属性设置为 Custom。 |
Sensor Size | 设置摄像机传感器的大小(以毫米为单位)。 选择 Sensor Type 时,Unity 会自动设置 X 和 Y 值。如果需要,可以输入自定义值。 |
X | 传感器的宽度。 |
Y | 传感器的高度。 |
Lens Shift | 从中心水平或垂直移动镜头。值是传感器大小的倍数;例如,在 X 轴上平移 0.5 将使传感器偏移其水平大小的一半。 可使用镜头移位来校正摄像机与拍摄对象成一定角度时发生的失真(例如,平行线会聚)。 沿任一轴移动镜头均可使摄像机视锥体倾斜。 |
X | 传感器水平偏移。 |
Y | 传感器垂直偏移。 |
Gate Fit | 用于更改分辨率门大小(Game 视图的大小/宽高比)相对于胶片门大小(物理摄像机传感器的大小/纵横比)的选项。 有关分辨率门和胶片门的更多信息,请参阅关于物理摄像机的文档。 |
Vertical | 使分辨率门适应胶片门的高度。 如果传感器宽高比大于 Game 视图宽高比,Unity 会在两侧裁剪渲染的图像。 如果传感器宽高比小于 Game 视图宽高比,Unity 会在两侧对渲染的图像进行过扫描。 选择此设置时,更改传感器宽度(Sensor Size > X 属性)不会影响渲染的图像。 |
Horizontal | 使分辨率门适应胶片门的宽度。 如果传感器宽高比大于 Game 视图宽高比,Unity 会在顶部和底部对渲染的图像进行过扫描。 如果传感器宽高比小于 Game 视图宽高比,Unity 会在顶部和底部裁剪渲染的图像。 选择此设置时,更改传感器高度(Sensor Size > Y 属性)不会影响渲染的图像。 |
Fill | 使分辨率门适应胶片门的宽度或高度(以较小者为准)。这会裁剪渲染的图像。 |
Overscan | 使分辨率门适应胶片门的宽度或高度(以较大者为准)。这会过扫描 (overscan) 渲染的图像。 |
None | 忽略分辨率门,仅使用胶片门。这会拉伸渲染的图像以适应 Game 视图宽高比。 |
Clipping Planes | 开始和停止渲染位置到摄像机的距离。 |
Near | 相对于摄像机的最近绘制点。 |
Far | 相对于摄像机的最远绘制点。 |
Viewport Rect | 通过四个值指示将在屏幕上绘制此摄像机视图的位置。在视口坐标中测量(值为 0–1)。 |
X | 绘制摄像机视图的起始水平位置。 |
Y | 绘制摄像机视图的起始垂直位置。 |
W_(宽度) |屏幕上摄像机输出的宽度。 | | H_(高度) | 屏幕上摄像机输出的高度。 |
Depth | 摄像机在绘制顺序中的位置。具有更大值的摄像机将绘制在具有更小值的摄像机之上。 |
Rendering Path | 定义摄像机将使用的渲染方法的选项。 |
Use Player Settings | 此摄像机将使用 Player Settings 中设置的任何渲染路径 (Rendering Path)。 |
Vertex Lit | 此摄像机渲染的所有对象都将渲染为顶点光照对象。 |
Forward | 每种材质采用一个通道渲染所有对象。 |
Deferred Lighting | 将在没有光照的情况下一次性绘制所有对象,然后在渲染队列末尾一起渲染所有对象的光照。注意:如果摄像机的投影模式设置为 Orthographic,则会覆盖该值,并且摄像机将始终使用前向渲染。 |
Target Texture | 引用将包含摄像机视图输出的渲染纹理。设置此引用将禁用此摄像机的渲染到屏幕功能。 |
Occlusion Culling | 为此摄像机启用遮挡剔除 (Occlusion Culling)。遮挡剔除意味着隐藏在其他对象后面的对象不会被渲染,例如,如果对象在墙后面。请参阅遮挡剔除 (Occlusion Culling) 以了解详细信息。 |
Allow HDR | 为此摄像机启用高动态范围渲染。请参阅高动态范围渲染以了解详细信息。 |
Allow MSAA | 为此摄像机启用多重采样抗锯齿。 |
Allow Dynamic Resolution | 为此摄像机启用动态分辨率渲染。请参阅动态分辨率以了解详细信息。 |
Target Display | 定义要渲染到的外部设备。值为 1 到 8 之间。 |
为了向玩家显示游戏,摄像机至关重要。可对摄像机进行自定义、为其编写脚本或对其进行管控以实现任何可想象的效果。对于拼图游戏,摄像机可保持静态以获得拼图的完整视图。对于第一人称射击游戏,可让摄像机跟随玩家角色,并将其置于角色的视线水平。对于赛车游戏,可能希望让摄像机跟随玩家的车辆。
可创建多个摄像机,并将每个摄像机分配给不同的__深度 (Depth)。按照从低__深度__到高__深度__的顺序绘制摄像机。换言之,__深度__为 2 的摄像机将绘制在深度为 1 的摄像机之上。您可以调整 Normalized View Port Rectangle__ 属性的值,从而调整屏幕上摄像机视图的大小和位置。这样就能创建多种迷你视图,如导弹摄像机、地图视图、后视镜等。
Unity 支持不同的渲染路径。您应该根据自己的游戏内容和目标平台/硬件而选择使用哪一个渲染路径。不同的渲染路径具有不同的功能和性能特征,主要影响光照和阴影。 在 Player 设置中选择项目使用的渲染路径。此外,可针对每个摄像机重写渲染路径。
有关渲染路径的更多信息,请查看渲染路径页面。
每个摄像机在渲染其视图时都会存储颜色和深度信息。屏幕中未绘制的部分为空,默认情况下将显示天空盒。使用多个摄像机时,每个摄像机都会在缓冲区中存储自己的颜色和深度信息,随着每个摄像机渲染而累积越来越多数据。场景中的任何特定摄像机渲染其视图时,您可以设置 Clear Flags 来清除不同的缓冲区信息集合。为此,请选择以下四个选项之一:
这是默认设置。屏幕的任何空白部分都将显示当前摄像机的天空盒。如果当前摄像机没有设置天空盒,它将默认为在 Lighting 窗口(菜单:__Window__ > Rendering > Lighting__)中选择的天空盒。随后,它将恢复为__背景颜色 (Background Color)。或者,可将 Skybox 组件添加到摄像机。如果要创建新的天空盒,可参考此指南。
屏幕的任何空白部分都将显示当前摄像机的__背景颜色__。
如果要绘制玩家的枪支而不使其陷入环境中,请设置一个__深度 (Depth)__ 为 0 的摄像机来绘制环境,并设置另一个__深度__为 1 的摄像机来单独绘制武器。将武器摄像机的 Clear Flags 设置为 Depth Only。这样将在屏幕上保持环境的图形显示,但丢弃有关每个对象在 3D 空间中所处位置的所有信息。绘制枪支时,不透明部分将完全覆盖所绘制的任何对象(无论枪支与墙壁的接近程度如何)。
此模式不会清除颜色或深度缓冲区。结果是将每帧绘制在下一帧之上,从而产生涂抹效果。此模式通常不用于游戏,更可能与自定义着色器一起使用。
请注意,在某些 GPU(主要是移动端 GPU)上,不清除屏幕可能会导致其内容在下一帧中未定义。在某些系统上,屏幕可能包含前一帧图像、纯黑色屏幕或随机有色像素。
Near 和 Far Clip Plane 属性可确定摄像机视图的开始和结束位置。这些平面垂直于摄像机的方向,并从摄像机位置算起。__近平面__是将要渲染的最近位置,而__远平面__是最远位置。
裁剪面还将确定深度缓冲区精度在场景上的分布情况。一般情况下,为了获得更好的精度,应将__近平面__尽可能移到远处。
注意,近裁剪面和远裁剪面以及由摄像机可视角度定义的平面一起描述了通常所知的摄像机_视椎体_。Unity 确保在渲染对象时不会显示完全位于此视椎体之外的对象。这就是所谓的视椎体剔除 (Frustum Culling)。无论您是否在游戏中使用遮挡剔除 (Occlusion Culling),都会发生视椎体剔除。
出于性能原因,您可能希望更早剔除小对象。例如,使小石块和碎片不可见的距离可远小于使大型建筑物不可见的距离。为此,可将小对象放入单独一层,并使用 Camera.layerCullDistances 脚本函数来设置每层剔除距离。
借助__剔除遮罩__,可使用层来选择性渲染对象组。可在此处找到有关使用层的更多信息。
__标准化视口矩形__专门用于定义将要绘制当前摄像机视图的屏幕特定部分。您可以将地图视图放在屏幕的右下角,或者将导弹尖端视图放置在左上角。通过一些设计工作,即可使用__视口矩形__来创建一些独特行为。
使用__标准化视口矩形__可以轻松创建双玩家分屏效果。创建两个摄像机后,将摄像机的 H 值更改为 0.5,然后将玩家 1 的 Y 值设置为 0.5,将玩家 2 的 Y 值设置为 0。这样,就能使玩家 1 的摄像机显示为屏幕的上半部,而玩家 2 的摄像机显示为屏幕的下半部。
将摄像机标记为__正交模式__,就会从摄像机视图移除全部透视。此模式最常用于创建等距视图游戏或 2D 游戏。
请注意,雾效在正交摄像机模式下均匀渲染,因此可能无法按预期显示。这是因为后透视空间的 Z 坐标用于雾的“深度”。这对于正交摄像机而言并不是严格准确的,但之所以使用该模式,是因为其在渲染过程中有一定的性能优势。
此设置将把摄像机的视图置于纹理上,然后可以将纹理应用于另一对象。如此便可轻松创建运动竞技场视频监视器、监控摄像机和反射等。
一个摄像机最多可以有 8 种目标显示设置。可控制摄像机来渲染最多 8 种显示之一。仅在 PC、Mac 和 Linux 上支持该功能。在 Game 视图中将显示摄像机检视面板 (Camera Inspector) 中选择的显示方式。