MMD联动Unity学习笔记 Vol.29 Cinemachine推轨镜头&状态驱动相机

前言
这期我们接着上期内容,继续跟着Shallot夏洛特大佬的视频学习Cinemachine


推轨镜头
这次会介绍Cinemachine里的Track and Dolly(推轨镜头)。我们将会介绍如何使用推轨镜头来得到精确顺滑的效果。我们还会介绍如何使用推轨镜头自动在轨道上跟随角色。
假如我们要给剪辑创建一系列的镜头,每个镜头专注于各自的拍摄,我们当然可以手动制作每个相机的动画,然而Cinemachine的推轨镜头是个完美的解决方案。

这个场景里有个角色会走到大门前面,那我们想做一个剪辑,相机跟随她到大门前,然后给大门上的监视相机一个特写。

新建一个Cinemachine推轨镜头,在菜单的这个地方。

推轨镜头由一系列的路径点组成,让虚拟相机可以在上面移动。点击加号即可创建新路径点。


我们可以在检视器设置路径点的位移或者场景里拖动它们来设置推轨。

选中虚拟相机,可以设置它的这个属性来控制它在轨道的移动。每个整数 都代表轨道上对应的路径点,在0-1之间调整,虚拟相机会在第一和第二路径点之间移动。修改数值至2或3,相机会在第二和第三个路径点之间移动。

如果我们把这个相机赋给一个动画轨道就可以把它的运动录制下来。

值得注意的是,我们也可以把这个相机赋给Timeline的摄像片段,用来进行不同的镜头切换。




所以如果我们要切换不同的摄像片段,那我们可以给每个片段赋予不同的虚拟相机,再让它们切换。 我们还可以使用推轨镜头来自动追踪目标的移动。这在某些第三人称游戏场景是非常有用的。 角色移动的时候相机会在推轨上移动。
下面我们就来设置一下。首先我们要给推轨推轨镜头设置一个跟随目标。

选中虚拟相机,把我们的角色赋给它。

然后启用自动推轨设置,运行测试一下,当角色移动的时候,相机会自动变换到轨道上最适合的位置。

我们可以看到,Cinemachine可以让你做到许多AAA游戏才有的相机行为。

状态驱动相机
下面介绍如何使用Cinemachine的“状态驱动相机”。包括如何创建这个组件,以及如何通过动画状态来控制相机的切换。

场景里我们有一个虚拟相机在推轨上自动跟随角色,如果角色静止,那么她的动画状态就进入一个固定的状态里,我想通过改变相机的行为让静止的时候看起来更有趣,当角色拾取道具的时候我想给她一个特写,这个时候我们就可以使用Cinemachine的状态驱动相机,配合多个虚拟相机,以及对象的Animator组件来实现。其原理就是根据角色的动画状态切换的同时一并切换镜头。

首先要创建一个状态驱动相机,到菜单的这个地方,点击以后就可以在层级之窗口创建出它。

在检视器里我们看到这个属性,在这里可以定义我们需要使用的所有虚拟相机。

可能会使用到所有的虚拟相机,那我们最好把使用到虚拟相机都设置成它的子对象。

值得注意的是,我们可以点击底部的加号或者减号,来对状态驱动相机进行新增和删除的操作。

当我们设置好每一个子相机的拍摄以后,那么就可以准备设置状态了,状态可以被场景里任何Animator组件驱动,举例来说,如果我们在做一个动作冒险游戏,相机行为可能会由某些事件来驱动,比如背景特写,爆炸,或者有敌人来了(类似过场动画)。我们也让为相机创建制定的Animator,然后根据事件使用脚本来控制动画状态的切换,但是本示例我们就是用状态驱动相机来轻松实现。

所以我们先把角色的Animator组件赋给这个接口。


当有一个Animator组件以后,我们可以对任何一个动画状态赋予相机。我们把行走动画状态设置以第一个相机,待机状态设置第二个相机,最后把其它非行走动画都设置到第三个相机。

如果我们运行一下会发现相机立刻会切换到待机状态的镜头,理想的情况是在一段时间不活动后才会切换镜头。

所以我们把这里的等待修改为5。

那么当角色再次禁止进入待机动画状态后,经过5秒才会切换镜头。

在默认状态下Cinemachine会进行相机的融合切换。

我们可以修改默认融合的类型来调整状态融合的类型以及时长。

假如我们想要在特定场合使用一种特定的状态切换,例如在与道具互动的时候变成特定镜头,可以点击创建资源按钮来自定义一个融合状态。

创建好以后我们就可以修改每一个状态及相机的融合属性,运行起来以后我们可以看到镜头之间的切换效果变得很不错了。你可以看到,状态驱动相机系统,可以让我们轻松创建并使用在各个动画状态之间使用各种类型的镜头拍摄。