相机是一个能够捕获并为玩家显示世界的设备。通过设置和操纵相机,你可以真实而独特的显示你的游戏。在一个场景中你可以有无限的相机。它们可以被设置为任意的渲染顺序,任意的的渲染位置,或者特定的场景部分。
属性
• 清除标记(Clear Flags):决定场景的哪个部分需要清除。当需要使用多个相机以显示不同的游戏元素时这是非常有用的。
• 背景颜色(Background color):在所有的元素这之后的屏幕颜色,没有天空盒
• 正规化视口矩形(Normalized View Port Rect):在屏幕坐标系下使用四个值来确定相机的哪些部分将显示在屏幕上。
• Xmin:相机视开始绘制的开始水平坐标
• Ymin:相机视开始绘制的开始垂直坐标
• Xmax:相机视结束绘制的开始水平坐标
• Ymax:相机视结束绘制的开始垂直坐标
• 近裁剪面(Near Clip Plane):相对于相机昀近绘制点
• 远裁剪面(Far Clip Plane):相对于相机昀远的绘制点
• 视野(Field of view):沿着局部 Y轴的相机视角宽度
• 正视(Is ortho graphic):打开或关闭相机的景深效果
• 正交视大小(Orthographic size):在正交模式下的视口大小
• 深度(Depth):相机的绘制顺序。具有较高深度的相机将绘制在较低深度相机的上面
• 裁剪蒙版(Culling Mask):包含或忽略物体层,可以在监视面板中将一个物体赋给一个层
• 渲染目标(Render Target)(Pro only):指示一个渲染纹理,相机视将输出到该纹理上。使用这个参数将使得相机不会渲染到屏幕上。
Unity中可以扩展的相机
细节相机是将你的游戏显示给玩家的必不可少的方法。它们可以被定制,脚本化或父子化以取得任何可以想象的效果。对于解谜游戏,你可以保持一个显示全部视的静态相机。对于一个 FPS游戏,你应该将相机作为玩家角色的子物体,并将其放置在角色的视平面上。对于竞赛游戏,你需要使得相机能够跟随玩家的交通工具。
你可以创建多个相机并赋予它们不同的深度(Depth)。相机将从低深度想高深度绘制。换句话说,一个具有深度 2的相机将绘制在具有深度 1的相机之上。你可以调整正规化视口矩阵 (Normalized View Port Rectangle)属性以调整相机视在屏幕上的大小和位置。这可以创建多个小视图,例如导弹控制器,地图视图和后视镜等等。
清除标志每个相机在渲染时都存储了颜色和深度信息。屏幕上没有绘制的部分将为空,并在缺省情况下显示天空盒。当你使用多个相机的时候,每一个都将缓存它的颜色和深度信息,并积累每一个相机的渲染数据。当一个相机在你的屏幕上渲染它的视时,你可以设置 Clear Flags来清除不同的缓存数据集。这个可以通过选择如下的四个选项之一来完成:
天空盒(Skybox)
这是一个缺省的设置。屏幕上任何空的部分都将显示当前相机的天空盒。如果当前相机没有设置天空盒,它将缺省使用在渲染设置 (Rendering Settings)中的天空盒。然后将使用背景颜色。
单色(Solid Color)
任何空的部分都将显示当前相机的背景色(Background Color)。
仅深度(Depth only)
如果你想绘制一个玩家的枪并且在处于环境内部时不需要裁剪它,你可以设置一个深度为 0的相机来绘制场景,另一个深度为 1的相机来单独绘制武器。武器相机的 Clear Flags应该被设置为仅深度。这将保持场景显示在屏幕上,但是会丢弃所有不存在 3D空间的所有信息。当武器被绘制时,不透明部分将完全覆盖所有已显示部分,而不论武器与墙有多么接近。
最后绘制枪,清理相机的深度缓存之后
不清除(Don’t Clear)
这种模式将不会清除颜色或深度缓存。结果就是每一帧都将绘制在另一帧之上,就像涂抹效果一样。这个在游戏中并不常用,并昀好与自定义 shader一起使用。
裁剪面(Clip Planes)
近裁剪面(Near)和远裁剪面 (Far Clip Pline)属性决定相机视渲染的开始和结束位置。这两个平面与相机的方向垂直并相对于相机的位置来确定。近裁剪面是昀近的开始渲染的位置,而远裁剪面是昀远的位置。
裁剪面同时确定了深度缓存的精度。通常情况下,为了得到更好的精度你应该将近裁剪面移动到尽可能远。
裁剪蒙版(Culling Mask) 裁剪蒙版使用层来选择性的渲染一组物体。习惯的做法是将你的用户接口放置在不同的层上,然后使用一个独立相机来渲染它。
为了使 UI显示在所有其他相机视的顶部,你还需要设置 Clear Flags和 Depth only并确定相机的深度比其他相机的高。
正规化视口矩形 (Nomalized Viewport Rectangle)
正规化视口矩形能够定义相机的视将显示屏幕的什么位置上。你可以将地图放置在屏幕的右下角,或者将导弹提示视放置在屏幕的左上角。只要一点设置工作,你就可以使用视口矩形 (Viewport Rectangle)来创建特有的行为。
使用正规化视口矩形非常容易的创建一个两玩家的分屏游戏效果。在创建了两个相机之后,改变玩家一的 Ymin为 0.5,玩家二的 Ymax为 0.5。这将使得玩家一的相机显示在屏幕的上半部分,而玩家二的相机将显示在屏幕的下半部分。
使用正规化视口矩形创建的分屏
正交视图(Orthographic)
使用正交相机将移除所有的景深效果,这在卷轴游戏和 2D游戏中昀常用的。
景深相机正交相机。物体并不会随着距离而变小
渲染纹理这个特性仅可用于 Unity Pro。它将一个相机视图输出到一个纹理上,然后可以将该纹理应用到其他物体上。这使可以使得监视器的创建非常容易,还有倒影效果,等等。
使用渲染纹理创建实时监视器
提示
• 相机可以像其他物体一样可以被实例化,父子化和脚本化。
• 为了在竞技游戏中增加速度感,可以使用一个高视野(Field of View)。
• 如果添加一个刚体(Rigidbody)组件,相机可以被用于物理模拟。
• 在你的场景中你可以使用的相机数量没有限制。
• 正交相机可以非常好的用于 3D用户接口。
• Pro版可以是你将相机视输出到纹理,称为渲染到纹理,以得到更独特的效果。
• Unity有预装的相机脚本,可以在 Component->Camera Control中找到。试验它们的不同效果。
• 如果你发现了深度问题 (靠近其他面的一个面在闪烁 ),试着设置近裁剪面(Near Plane)尽可能大。
• 相机不能同时渲染到屏幕和纹理,只能使用一个。