简介
摄像机(Camera)组件(Component)用于为玩家捕获和展示游戏世界的设备。通过自定义和操纵摄像机,您可以让游戏以不同的风格和方式呈现。
组件逻辑
- 需要使用 摄像机(Camera)组件(Component)分配给场景中的对象以定义摄像机。
- 摄像机将 3D 的游戏世界(一个或多个游戏场景)通过摄像机组件中的属性设置渲染为 2D 视图。
- 将 2D 视图映射于玩家的移动设备中将游戏世界呈现。
【Camera001.png】
创建方法
在 场景编辑器(Scene Editor)的 层级窗口(Hierarchy)或者 场景预览窗口(Scene)中,选中摄像机对应的 游戏对象(Game Object)。
方法一:
选中对应的游戏对象后,在 检视窗口(Inspector)窗口中用鼠标左键点击 添加组件(Add Component)> 渲染(Rendering)> 摄像机(Camera) 进行创建。
【Camera002.png】
方法二:
选中对应的 游戏对象 后,在 菜单栏(Menu Bar)中点击 组件(Component)> 渲染(Rendering)> 摄像机(Camera) 进行创建。
【Camera003.png】
属性
摄像机(Camera)组件(Component)包含以下属性:
【Camera004.png】
| 名称 | 描述 |
| 清除标志(Clear Flags) | 设置将从屏幕清除的部分,通常用于多个摄像机来绘制不同的游戏元素。每个摄像机在渲染其视图时都会存储颜色和深度信息。屏幕中未绘制的部分为空,默认情况下将显示天空盒。使用多个摄像机时,每个摄像机都会在缓冲区中存储自己的颜色和深度信息,随着每个摄像机渲染而累积越来越多数据。场景中的任何摄像机渲染其视图时,您可以通过清除标志属性的设置来清除不同的缓冲区信息集合。 · 天空盒(Skybox),这是默认设置。 屏幕的任何空白部分都会显示当前项目在 光照窗口(Lighting)中配置的天空盒。 关于配置天空盒的详细方法,请参阅 天空盒 章节。 【Camera005.png】 · 纯色(Color),屏幕的任何空白部分都将显示当前摄像机的 清除颜色(Clear Color)属性设置的颜色。 【Camera006.png】 · 深度(Depth),屏幕中渲染过的像素如果没有需要渲染的物体,则会保持原来的颜色值,否则会渲染新的物体颜色值。清除标志为深度的摄像机通常会与其他清除标志的摄像机结合使用,具体渲染过程和应用案例请参阅 深度清除标志的应用 小节。 【Camera007.gif】 · 不清除(Nothing),此模式不会清除颜色或深度缓冲区。结果是将每帧绘制在下一帧之上,从而产生涂抹效果。此模式通常不直接应用于渲染游戏场景,更普遍与自定义 着色器(Shader)一起使用。值得注意的是,在某些手机设备上显示过程中,不清除模式可能会导致其内容在下一帧中未定义。在某些系统上,屏幕可能包含前一帧图像、纯黑色屏幕或随机有色像素。 【Camera008.gif】 |
| 清除颜色(Clear Color) | 在绘制视图中的所有元素之后但没有天空盒的情况下,应用于定义屏幕剩余部分的颜色。 此属性仅在 清除标志(Clear Flags)属性值为 天空盒(Skybox)或 纯色(Color)时才可查看或编辑。 |
| 剔除遮罩(Culling Mask) | 设置摄像机渲染过程中将会包含或忽略哪些 层次(Layer)的 游戏对象(Game Object)。 点击属性下拉框会显示当前游戏项目包含的所有游戏对象层次,勾选表示该层次的游戏对象将会被此摄像机渲染,不勾选表示该层次的游戏对象将会在此摄像机渲染过程中忽略。您也可以使用 Camera.cullingMask(layerB2D:number) 在游戏运行时动态调整渲染的游戏对象层次,具体请参阅 API 文档 Camera.cullingMask 的相关内容。在 检视窗口(Inspector)中将设置每个游戏对象的层次,具体设置方法请参阅 游戏对象层次 章节。 |
| 正交(Orthographic) | 设置射线机是否以正交模式渲染游戏世界。 勾选,该摄像机以正交模式渲染游戏世界。 不勾选,该摄像机以透视模式渲染游戏世界。关于正交与透视摄像机模式的区别请参阅 摄像机 章节。 |
| 视角(Field Of View) | 设置摄像机的视角,属性值为布尔值,以度数为单位。 当 视角(Field Of View)属性设置为 不勾选(False)时,此属性将显示且为可编辑状态。 |
| 正交视图尺寸(Orthographic Size) | 用于设置摄像机的视口的缩放比例。 当 视角(Field Of View)属性设置为 勾选(True)时,此属性将显示且为可编辑状态。 此属性值为 0.5 表示摄像机的高度相当于场景中 1 单位长度。 |
| 剪裁面(Clipping Planes) | |
| 近剪裁面(Near) | 开始渲染位置到摄像机的距离。相对于摄像机的最近绘制点。 |
| 远剪裁面(Far) | 停止渲染位置到摄像机的距离。相对于摄像机的最远绘制点。 |
| 视口(View Port) | 通过四个值指示将在屏幕上绘制此摄像机视图的位置和范围。 · X,绘制摄像机视图的起始水平位置,相对于屏幕宽度的比例。 · Y,绘制摄像机视图的起始垂直位置,相对于屏幕高度的比例。 · W,屏幕上摄像机输出的宽度占屏幕宽度的比例。 · H,屏幕上摄像机输出的高度占屏幕高度的比例。 |
| 深度(Depth) | 摄像机将游戏世界内容渲染到屏幕的顺序。属性值越小表示越先渲染,因此具有更大值的摄像机将绘制在具有更小值的摄像机之上。 |
| 需要不透明纹理(Require Opaque Texture) | 设置是否需要获取本摄像机的 不透明纹理(Opaque Texture)。 勾选,此摄像机渲染画面网格后提供场景快照,您可以在 着色器(Shader)中通过 _OpaqueTexture 读取当前帧画面的透明纹理,用来创建毛玻璃、水折射或热浪等效果。 不勾选,此摄像机渲染画面网格后不生成画面图像副本,更节省运行性能。 |
| 需要深度纹理(Require Depth Texture) | 设置是否需要获取本摄像机的 深度纹理(Depth Texture)。 勾选,此摄像机渲染画面网格后提供深度纹理的副本,您可以在 着色器(Shader)中通过 _DepthTexture 读取当前帧画面的深度纹理,用来创建更真实的水体扰动等效果。 不勾选,此摄像机渲染画面网格后不生成深度纹理副本,更节省运行性能。关于深度纹理的更详细内容,请参阅 摄像机与深度纹理 章节。 |
深度清除标志的应用
当您需要使用多个摄像机渲染不同的物体时,如果其中一个摄像机的 清除标志(Clear Flags)属性值设定为 深度(Depth)时,由于该摄像机渲染时不会清除之前已渲染的图像,只有在后面其渲染的图像深度大于前面的渲染的图像,才会执行渲染,并且清除深度值,所以不会因为其他摄像机渲染的物体的深度值大于深度清除标志的摄像机之前渲染的物体的深度值而清除之前的图像,所以图像会覆盖在已有图像上方。
【Camera009.gif】
常用的案例就如第一视角射击游戏,如果您简单地将枪械游戏对象作为摄像机的子级,当玩家紧贴墙面或其他障碍物,那枪械就会穿模陷入墙体或障碍物内。
【Camera010.png】
若此时同时启动两个摄像机(我们将其命名为 CameraA 和 CameraB)。
【Camera011.png】
其中 CameraB 的 清除标志(Clear Flags)属性设置为 深度(Depth),且 深度(Depth)属性设置为正数且比 CameraA 的值大。
【Camera012.png】
由于深度清除标志的特性,枪械始终显示在屏幕中,不会陷入墙体或其他障碍物,甚至枪械的相关动作都可以实时反馈。
【Camera013.gif】
这种方法在制作大多数第一人称视角的游戏中会非常有帮助。

勾选,该摄像机以正交模式渲染游戏世界。
不勾选,该摄像机以透视模式渲染游戏世界。
勾选,此摄像机渲染画面网格后提供场景快照,您可以在 着色器(Shader)中通过
不勾选,此摄像机渲染画面网格后不生成画面图像副本,更节省运行性能。