
摄像机
Tutorial
Beginner
+0XP
20 mins
(557)
Unity Technologies

现在,您已经创建了玩家角色和环境,接下来是时候考虑一下游戏的摄像机了。
在本教程中,您将:
- 探索 Unity 中的 Camera 组件
- 使用 Cinemachine 设置虚拟摄像机
- 添加一系列不同的后期处理效果
学完本教程后,您将设置您的摄像机,使游戏在视觉上尽可能吸引玩家。
Languages available:
1. 探索 Camera 组件
在上一教程中,您为游戏创建了一个关卡。角色现在可以在场景中走动,但这意味着他有时会远离摄像机的视野。在本教程中,您将调整摄像机设置以确保不会发生这种情况。
Unity 中的场景由游戏对象组成,而游戏对象连接了一组组件。对玩家而言的场景视图以同样的方式构建。
要查看场景,场景中的游戏对象必须具有 Camera 组件。创建新的场景时,其中将添加一个名为 Main Camera 的游戏对象,这个游戏对象具有 Camera 组件。
摄像机指向游戏对象的 z 轴,其行为与所有其他游戏对象完全相同。在 Scene 视图中,您可以看到一个代表摄像机视锥体的辅助图标。视锥体是一个看起来像顶部切割后平行于底部的金字塔的实体形状。这是透视摄像机可以看到和渲染的区域的形状。
制作游戏时,有几种选择可确保摄像机跟随玩家角色。一种解决方案是为此编写一段脚本。但是,Unity 具有针对该问题的内置解决方案:Cinemachine。
2. Cinemachine 的工作原理
Cinemachine 是 Unity 针对游戏中与摄像机有关的所有问题的解决方案。该系统简单总结如下:
- 在场景中创建一个或多个“虚拟”摄像机。
- 这些虚拟摄像机由一个名为 Cinemachine Brain 的组件进行管理。
- Cinemachine Brain 与 Camera 组件连接到相同的游戏对象,默认情况下,这个游戏对象将是 Main Camera 游戏对象。
- Cinemachine Brain 管理所有虚拟摄像机,并确定实际摄像机应跟随哪个虚拟摄像机(或虚拟摄像机的组合)。
在您的游戏中,摄像机只会跟随 JohnLemon,因此您只需要一个虚拟摄像机。您将确保此虚拟摄像机跟随 JohnLemon,然后 Main Camera 游戏对象会连接到这个虚拟摄像机。
3. 使用 Cinemachine 设置虚拟摄像机
要使用 Cinemachine 设置虚拟摄像机,请执行以下操作:
在 Project 窗口中,导航到 Assets > Scenes,然后双击 MainScene。
1.在 Hierarchy 中,选择 JohnLemon 游戏对象。
2.将鼠标光标移到在 Scene 窗口上,并按 F 键。
3.在顶部菜单中,选择 Cinemachine > Create Virtual Camera。
这样将在场景中创建一个名为 CM vcam1 的新游戏对象:
该对象将在 Scene 窗口中摄像机的焦点处创建,因此应该会位于 JohnLemon 上面。但是,由于现在您在场景中有了一个虚拟摄像机,它会移动 Game 窗口的视图,因此您将无法再在 Game 窗口中看到 JohnLemon。
为解决此问题,您需要通过更改 Cinemachine Virtual Camera 组件设置来确保虚拟摄像机正在追踪角色。
4. 更改 Cinemachine Virtual Camera 组件设置
要设置虚拟摄像机以使其追踪 JohnLemon,请执行以下操作:
1.在 Hierarchy 中,选择 CM vcam1。
2.在 Inspector 中,找到 Cinemachine Virtual Camera 组件。该组件有很多设置,但是现在您只需要关注三个部分:目标引用、Body 和 Aim。
目标引用部分有两项设置:Follow 和 Look At。这些可选设置是对游戏对象的 Transform 组件的引用。
如果要移动虚拟摄像机,虚拟摄像机需要知道如何移动。具体来说,虚拟摄像机需要引用要跟随的 Transform 组件。同样,如果想旋转虚拟摄像机,虚拟摄像机需要知道自己必须经过旋转才能观看的目标。
下面两个部分是 Body 和 Aim。这些设置分别用于控制摄像机如何移动和旋转。您将要限制虚拟摄像机的移动,使摄像机的视野始终涵盖 JohnLemon 但实际上并没有观看该角色。
3.在 Aim 部分中,将右上角的下拉菜单从 Composer 更改为 Do Nothing。
4.将 JohnLemon 游戏对象从 Hierarchy 窗口拖放到 Cinemachine Virtual Camera 组件的 Follow 属性上。这样会将 Follow 设置更改为引用 JohnLemon 的 Transform 组件。
5.在 Body 部分中,将该部分右上角的下拉菜单从 Transposer 更改为 Framing Transposer。将 Body 更改为 Framing Transposer 可以为虚拟摄像机提供关于其 Follow 目标必须在屏幕上所处位置的规则,从而控制虚拟摄像机的位置。
要了解有关不同 Body 设置值的更多信息,可查看 Cinemachine 文档(在顶部菜单中,选择 Cinemachine > About)。
现在,Game 窗口上应该有若干红色和蓝色框。这些是目标可以在屏幕上出现的位置的参考线框:
6.现在,让我们将虚拟摄像机设置为正确的角度。在 Hierarchy 中,选择 CM vam1 游戏对象。在 CM vam1 游戏对象的 Transform 组件上,将围绕 x 轴的 Rotation 设置为 45。
现在,虚拟摄像机向下倾斜并正在从上往下观看角色。这大致就是您需要的视角。当您仅更改旋转时,为什么虚拟摄像机会移动?这就是 Cinemachine 的功能!
您知道自己需要更大的相对于摄像机的自顶向下角度,然后虚拟摄像机推断出:如果您希望将摄像机向下倾斜,则需要将摄像机升高才能将其目标显示在屏幕上。
7.Framing Transposer 的大多数默认设置都适合您的游戏。唯一需要更改的是 Camera Distance 设置;角色在屏幕上有点太小,因此您需要将虚拟摄像机移近一点。
将 Camera Distance 设置从 10 更改为 8。
8.在 Hierarchy 中,选择 CM vcam1,然后将其重命名为 VirtualCamera。
9.取消选择 VirtualCamera 游戏对象以从 Game 窗口中删除参考线。
10.从顶部菜单中选择 File > Save Scene 或按 Ctrl + S (Windows) 或 CMD + S (macOS),保存该场景。
11.单击工具栏中的 Play 按钮并测试到目前为止完成的游戏。完成测试后,再次单击 Play。
就是这样 — 您已经设置了虚拟摄像机及其移动!现在,您可以开始为摄像机添加一些视觉效果,使游戏看起来更加出色。
5. 添加后期处理效果
后期处理涉及在游戏图像渲染到屏幕上之前对其应用滤镜和效果(类似于可以添加到照片的滤镜)。在本教程的这一部分中,您将探索后期处理在 Unity 中的工作原理,然后将其应用于您自己的游戏。
后期处理在 Unity 中的工作原理
通常,后期处理效果会组合在一起,并用于游戏世界的不同区域。这意味着,当摄像机位于特定区域时,其指定的一组处理将应用于图像。
想象一下,您位于黑暗的房间中,然后穿过一扇门进入室外明亮的日光之中。您的眼睛需要花些时间进行调整适应,并且在您离开房间时一切看起来都会比平常明亮许多。在 Unity 中,可以通过在房间内和房间外应用不同的后期处理效果组来模拟这种情况。后期处理效果组是称为后期处理配置文件 (Post-processing Profiles) 的资源。分配了配置文件的游戏世界区域是称为后期处理体积 (Post Process Volumes) 的组件。
有时,不同的摄像机具有不同的后期处理。为了将一个处理效果组链接到特定摄影机,需要将 Post Process Layer 组件添加到与 Camera 组件相同的游戏对象。层 (Layer) 是一种按行为组织游戏对象的方法。
了解 Unity 中的后期处理的更多信息
本教程包含了在 Unity Editor 中添加特定后期处理效果的分步式说明。如果想进一步详细了解这些效果,可在以下位置找到更多信息:
6. 创建后期处理层 (Post-Processing Layer)
要创建后期处理层,请执行以下操作:
1.在 Hierarchy 中,选择 Main Camera 游戏对象。
2.在 Inspector 中,找到游戏对象名称下面的 Layer 属性。
一个游戏对象只能属于一层。Main Camera 位于默认层 (Default Layer) 上。Unity 中默认有多个选项,但您也可以在 Tags & Layers Manager 中创建自己的层。
3.在 Layer 属性下拉选单中,选择 Add Layer...
4.在 Tags & Layers Manager 中,有 32 个可用的层(以 0 开头,以 31 结尾)。
前八个层保留用于 Unity 的默认层,而其余的 24 个层则可用于任何所需的层。由于您需要一个用于后期处理体积 (Post Process Volume) 的层,因此有必要为所有后期处理体积创建一个层。
5.添加“PostProcessingVolumes”作为 User Layer 8。
6.在 Hierarchy 中,选择 Main Camera 游戏对象。该游戏对象仍将位于默认层 (Default Layer) 上:
这是因为,尽管创建了新层,但尚未将 Main Camera 重新分配给该层。
7.为 Main Camera 添加 Post Process Layer 组件。
8.使用下拉菜单将 Layer 属性从 Nothing 更改为 PostProcessingVolumes。
7. 通过抗锯齿 (Anti-aliasing) 改善图像质量
在继续设置体积和配置文件之前,让我们快速了解一下抗锯齿。
锯齿是指对象的边缘看起来呈锯齿状并可以看到像素轮廓:
抗锯齿是一种后期处理效果,会使用中间色调的像素将这些锯齿状线条包围起来,从而可以降低锯齿明显程度。有几种不同的算法可以计算出需要调整哪些像素以及调整多少,然后您将使用最简单、最有效的一种。
1.确保 Game 视图可见,以便您可以看到本教程的这一部分中所做的更改。
2.在 Post Process Layer 组件中,将 Mode 属性下拉选单从 No Anti-aliasing 更改为 Fast Approximate Anti-aliasing (FXAA)。
3.在该下拉选单下选中 Fast Mode 复选框。
JohnLemon 现在的视觉效果已经好了很多!
现在正确设置 Post Process Layer 后,接下来您可以继续创建体积。
8. 创建后期处理体积 (Post-Processing Volume)
要创建后期处理体积,请执行以下操作:
1.在 Hierarchy 窗口中,选择 Create > Create Empty。
2.将新的游戏对象命名为“GlobalPost”。
3.在 Inspector 中,将 Layer 设置为 PostProcessingVolumes。
4.将 Transform 组件的 Position 属性设置为 (0, 0, 0)。该游戏对象将成为您的全局后期处理体积。全局体积将作为受影响的摄像机的默认配置文件。然后,其他非全局体积可以覆盖此体积的效果,但是您的游戏将不需要任何其他体积。
5.为 GlobalPost 添加 Post Process Volume 组件。
6.启用 Is Global 复选框。
7.单击 Profile 属性最右边的 New 按钮。随后将创建新的后期处理配置文件。该配置文件的资源将保存在 Assets > Scenes 中名为 MainScene_Profiles 的新文件夹中。
8.现在已经设置了配置文件,接下来您将在 Post Process Volume 组件中看到更多可用设置。
Overrides 细分部分适用于可以覆盖摄像机正常渲染方式的不同效果。默认情况下,配置文件中没有效果,因此 Overrides 细分部分中没有任何内容。
9. 添加颜色分级 (Color Grading) 效果
要添加颜色分级效果,请执行以下操作:
1.单击 Add effect... 按钮并选择 Unity > Color Grading。
颜色分级用于更改被渲染视图的亮度、对比度和颜色。该功能类似于在照片编辑软件或 Instagram 中应用滤镜。为了让您的游戏看起来更加诡异,您将调整被渲染视图的颜色和亮度级别。
注意:该组件中的设置是配置文件资源的快捷方式;对 Overrides 细分部分进行的所有更改都将更改配置文件资源,并且不会直接影响该组件。
2.选择 Color Grading 旁边的箭头以展开其设置。
3.首先,需要对场景进行色调映射 (Tonemap)。色调映射会更改最终渲染帧的输出,以便更轻松地控制光源和阴影。
启用 Tonemapping 细分部分中的 Mode 复选框。使用下拉菜单,将其属性从 None 更改为 ACES。ACES 色调映射是应用色调映射的行业标准方法。这种色调映射有助于为您的项目创建更具电影质感的外观效果。
4.您会注意到场景现在看起来真的很暗。这是因为 ACES 的默认曝光为零(如需了解更多信息,请参阅相关文档)。解决此问题的一种好方法是使用 Post-exposure 功能。Post-exposure 是一种调整默认曝光的方法。
在 Tone 细分部分中,启用 Post-exposure (EV) 复选框。将值设置为 1 可以恢复场景的光亮。
5.您还可以通过更改一些颜色来使场景更加诡异。在 Color Grading 部分的中间位置,找到名为 Trackballs 的色环。
6.启用每个轨迹球 (Trackball) 下的 Lift、Gamma 和 Gain 复选框。
Lift 会影响阴影的颜色,Gain 会更改最亮的高光,而 Gamma 涵盖图像颜色中间(或中间范围)的所有内容。
7.拖动轨迹球 (Trackballs) 中心的圆圈以略微调整 Game 视图中的颜色。拖动:
- 将 Lift 和 Gamma 轨迹球略微拖向蓝色
- 将 Gain 轨迹球略微拖向黄色
这样将会增加阴影的深度并增加光照的温暖度。
8.将 Color Grading 效果折叠起来。
10. 添加泛光 (Bloom) 效果
您的光源非常有效,但看起来还不像真实的光源。添加泛光 (Bloom) 效果可以使光源具有良好的发光效果:
1. 单击 Add effect... 按钮并选择 Unity > Bloom。展开 Bloom 效果部分。
2.在该部分标题的正下方选择 All 快捷方式 — 这将启用 Bloom 的所有设置。由于 Intensity 的值不够高,目前实际上没有任何发光。
3.将 Intensity 属性设置为 2.5,使光源发出漂亮的明亮光芒。
4.您可能还会看到一些其他较亮的对象,即使稍微发光也可能看起来不错。您可以使用 Threshold 属性将这些对象添加到 Bloom 效果。降低此值可向该效果添加亮度更低的像素。
将 Threshold 设置为 0.75 可向场景添加更强的发光。
5.将 Bloom 效果折叠起来。
11. 添加环境光遮挡 (Ambient Occlusion) 效果
现在的光源感觉很明亮,但是对于这里的鬼屋来说,保持幽灵般的气氛很重要。一种使一些角落和裂缝变暗的好方法是使用环境光遮挡 (Ambient Occlusion) 效果。环境光遮挡使光线未到达的较局促角落变暗,由此模仿这些区域的现实效果。
要添加这种效果,请执行以下操作:
1.单击 Add effect... 按钮并选择 Unity > Ambient Occlusion。展开 Ambient Occlusion 效果部分。
2.单击 Ambient Occlusion 的 All 快捷方式以激活您需要的所有功能。
3.像 Bloom 一样,您需要先设置 Intensity,然后我们才能看到它起作用。将 Intensity 属性设置为 0.5,然后便可在房间的角落创建漂亮的诡异阴影。
4.您可以使用 Thickness Modifier 在整个房间中进一步散步这种效果。将 Thickness Modifier 属性设置为 3.5。
现在,您应该可以看到场景中其他一些道具后面散布着巨大的阴影效果。
5.将 Ambient Occlusion 效果折叠起来。
12. 添加渐晕 (Vignette) 效果
有几种效果可以模拟真实的摄像机如何观看场景。最后几种效果将改变这种摄像机镜头的工作方式。首先,您要添加渐晕效果以使摄像机镜头本身的边缘变暗。这有助于专注于玩家并使游戏感觉更幽闭恐怖。
要添加这种效果,请执行以下操作:
1.单击 Add effect... 按钮并选择 Unity > Vignette。展开 Vignette 效果部分。
2.单击 Vignette 的 All 快捷方式以激活您需要的所有功能。
3.与泛光 (Bloom) 和环境光遮挡 (Ambient Occlusion) 类似,渐晕 (Vignette) 效果也需要 Intensity 属性。该属性将决定这种效果在屏幕上散布的距离。将 Intensity 属性设置为 0.5。
4.您可以通过增加 Smoothing 值来使氛围感觉更幽闭恐怖。Smoothness 属性决定了这种效果朝着屏幕中心淡入淡出的距离。将 Smoothness 属性设置为 0.3。
5.将 Vignette 效果折叠起来。
13. 添加镜头失真 (Lens Distortion) 效果
最后需要添加的效果是镜头失真效果。这种效果将扭曲最终渲染的帧,并有助于让人感觉像是正在通过间谍相机观看游戏。
要添加这种效果,请执行以下操作:
1.单击 Add effect... 按钮并选择 Unity > Lens Distortion。展开 Lens Distortion 效果部分。
2.单击 Lens Distortion 的 All 快捷方式以激活您需要的所有功能。
3.与其他效果一样,Intensity 用于控制效果的强度。请来回滑动 Intensity 滑动条以了解效果的大致情况。然后,将 Intensity 属性设置为 35。
4.使用这种效果时,有时可能会在图像发生变形的屏幕边缘产生视觉干扰。要修复此问题,只需将渲染的帧稍微放大一点以消除视图中的干扰。
将 Scale 属性设置为 1.1 即可修复此问题。
5.保存您的场景。
您已经完成了后期处理!
14. 总结
在本教程中,您处理了游戏的大量视觉效果,不仅涉及摄像机的移动方式,而且还更改了视觉效果,从而使游戏看起来非常专业。请查看由此产生的视觉差异:
之前:
之后:
在下一教程中,您将探索游戏的 UI(用户界面)并为游戏创建结尾。