Unity学习记录/ #1 Cinemachine
//
本专栏为本人对Cinemachine的学习记录,欢迎大家分享学习经验和指出本文的错误之处。
//
Cinemachine,影视相机,是unity提供的有关于相机使用的Package工具。值得一提的是,Unity官方文档中对它的描述是 “这是适合充满激情的创作者的智能摄像机工具”。这是一个非常好用且不会浪费性能的相机系统,能够帮助我们简单便捷地实现影视级镜头。
那么首先,让我们的Unity项目获取Cinemachine,打开Window → Package Manager,在Packages: Unity Registry 下搜索Cinemachine,点击Install进行安装。

重要注意事项:如果要从旧 Asset Store 版本的 Cinemachine 进行升级,请先从项目中删除 Cinemachine 资源,然后再从 Package Manager 安装此版本。
从 2.7.1 开始的新功能:您在寻找 Cinemachine 菜单吗?它已移到 GameObject 菜单。

当我们创建了一个Virtual Camera后,就能发现Hierarchy 窗口中多出一个CM vcam物体,这就是虚拟相机,非常好理解,它就是一个虚拟的摄像机并不是一个真正的摄像机类,因此我们仍然需要一个Main Camera 作为我们的CinemachineBrain(你可以将其理解为中央控制中心),别担心Unity都已经为我们自动添加好了。通过创建和使用多个虚拟相机,我们就可以实现非常牛逼的 镜头艺术。

让我们先来了解一下 Virtual Camera 的各类属性。(可能完全还是有些困难,但随着后续的学习我保证这些都是很简单的内容)

以下部分内容取自Unity官方对Cinemachine的介绍文档:
Status:虚拟摄像机的状态,分别有 Live/ Standby/ Disabled(现场/ 待机 / 禁用)三种状态。
///
现场:虚拟摄像机主动控制一个具有Cinemachine大脑的Unity摄像机。当一个Cinemachine大脑从一个虚拟摄影机混合到另一个虚拟摄影机时,两个虚拟摄影机都是实时的。混合完成后,只有一个实时虚拟摄影机。
待机:虚拟摄像头不控制Unity摄像头。然而,它仍然遵循并瞄准其目标,并在每一帧进行更新。处于此状态的虚拟摄像机将被激活,其优先级与实时虚拟摄像机相同或更低。
禁用:虚拟摄影机不控制Unity摄影机,也不主动跟踪或瞄准其目标。处于这种状态的虚拟相机不会消耗处理能力。要禁用虚拟摄影机,请停用其游戏对象。虚拟摄影机存在,但在场景中已禁用。但是,即使游戏对象已停用,如果虚拟摄影机正在参与混合,或者如果它被时间线调用,则虚拟摄影机仍可以控制Unity摄影机。
///
Game Window Guides:设定游戏视图中辅助线的可见性,当“Look At”有指定游戏对象且使用Composer或Group Composer,或当“Follow”有指定目标且使用Framing Composer时,可用。(并不重要,默认勾选即可)
Save During Play:勾选以在Play模式下应用更改。(一般Play时做出的更改是不会保留的)使用此功能可以微调虚拟相机,而无需记住要复制和粘贴的属性。此属性适用于所有虚拟摄影机。
Priority(优先级):当我们存在多个激活的虚拟摄像机,而我们只需要一个视角时,Camera便会使有优先级更高的那个虚拟摄像机。该值越大,表示优先级越高。
Follow:该属性可获取到一个物体的Transform,摄像机将跟随着他进行移动,Body properties将规定移动的方式。
Look At:该属性可获取到一个物体的Transorm,摄像机将跟随着他进行旋转,Aim properties将规定旋转的方式。
Standby Update:故名思意,控制虚拟相机待机时更新的频率。

Lens:
Vertical FOV:垂直视野角度,该值越大,相机的视野范围就越大。
Near Clip Plane:相机进行绘制的最近点。
Far Clip Plane:相机进行绘制的最远点。
Dutch:荷兰角。在z轴上倾斜Unity相机,以度为单位。该属性是虚拟相机所独有的;Unity摄影机中没有对应属性。
Inherit Position:启用后,只要此虚拟摄影机处于活动状态,如果可能就会强制其初始位置与Unity摄影机的当前位置相同。

可以看到 Body 和 Aim 属性中有非常多的内容,这也是我们使用虚拟相机时的主要部分,下面将简单介绍。

Body:
1.Transposer:移动跟随Follow,可设置阻尼来实现缓慢延迟跟随
2.Do Nothing:虚拟摄像机无法移动
3.Framing Transposer:在一个固定的屏幕空间关系中向Follow移动,可设置阻尼
4.Orbital Transposer:以可变的关系向Follow移动,可接受玩家的输入
5.Tracked Dolly:在预先设置好的轨迹上移动
6.Hard Lock to Target:与Follow使用相同的position
7.3rd Person Follow:围绕Player水平和垂直旋转相机,以跟踪目标,可由鼠标控制。

Aim:
1.Composer:使用构图约束,保持Look At 在相机的框架中
2.Group Composer:保持复数的Look At 在相机的框架中
3.Do Nothing:虚拟相机无法旋转
4.POV:根据玩家的输入旋转相机
5.Same As Follow Target:把相机的rotation设置为Follow的rotation
6.Hard Look At:保持Look At 在相机框架的中心
除此之外,还有Noise属性,本次将不会介绍。
”在虚拟摄影机中使用噪波特性来模拟摄影机抖动。Cinemachine包含一个基本的多通道柏林组件,该组件为虚拟相机的移动添加柏林噪声。柏林噪声是一种计算具有自然行为的随机运动的技术“。
Extensions属性则允许我们为虚拟相机进行拓展,为其添加额外的行为组件,真是十分多功能性的相机呢。

好了,在我们充分了解完虚拟相机的属性面板后,终于能开始使用它了。
最简单的使用方式就是,通过启用或禁用当前的虚拟相机,来切换到下一个虚拟相机。我们在场景中设置了多个虚拟相机(全为激活状态),分别为CM vcam1、CM vcam2、CM vcam3等等,因为虚拟相机的优先级顺序,我们在Game窗口中将会只看到优先级最高的那个相机的视角。这时,我们将优先级最高的相机禁用掉(这里为3号相机),unity会帮助我们过渡到2号相机的视角(优先级第二高),同理我们禁用2号相机,将过渡到1号相机,再启用3号相机,过渡到3号相机。为了实现不同的过渡效果,我们可以在Camera Brain 也就是我们的控制中心中设置。

我们可以看到,目前的切换方法是Ease In Out(渐出),时长为2s,那么我们切换虚拟相机时,将会有2s的逐渐移动切换效果。我们一共有8种供选择的切换效果!Custom模式下,还可以自定义曲线。

更便利的是,我们可以在下面的Custom Blends中,设置两两摄像头间的切换效果,例如我们可以设置2号摄像头到1号摄像头的切换效果为渐出,1号到3号为渐入等等。


本次就介绍到这,此外Timeline和Cinemachine的还能结合使用,大家快动手试试吧。
参考/ 相关教程:
1.About Cinemachine | Cinemachine | 2.8.6 (unity.cn)
2.https://www.bilibili.com/video/BV1bk4y1675H?share_source=copy_web
(麦克老师牛逼!)