MMD联动Unity学习笔记 Vol.30 Cinemachine自由视角&镜头切换

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


Free Look(自由视角)

这期我们介绍如何使用FreeLook相机跟随角色,还会介绍根据我们的输入来自定义自由观察组件来获得预期的效果。

示例里我们有一辆可控制的飞船,当前有一个虚拟相机锁定了飞船,不断的跟随它,像是通常的游戏一样,玩家控制飞船移动的同时可以控制相机角度,所以相机视野只有前方的一小部分区域,只能看到角色的一小部分。Cinemachine的自由观察相机组件可以让我们在跟随角色的同时自由的旋转相机视角。

首先在这里创建它,

我们将之前的相机隐藏,

将主角赋给这两个属性接口,

运行一下,当我们移动鼠标,相机的会围绕着飞船移动,当然需要微调一下,

看到我们的检视器,把X轴的速度值调小一些可以获得更顺滑的效果。

取消反向轴,我比较喜欢视角瞄准我鼠标的指向,

自由观察相机会在3个绑定点之间顺滑的移动,就是这三个。Cinemachine可以让我们在不同的情况下调整绑定点以及相关的参数来获得不同的效果。

在场景视窗中我们可以看到自由观察相机组件会显示出它的辅助线,我们修改一下参数,可以看到辅助线也会跟着变化。

如果想预览相机,我们可以修改X或者Y轴的数值,

在这里我们可以使用目标里面的设置来调整视角,

同理,也可以拖拽导航线来调整。

我还是在检视器里来调整吧。如果修改Y轴数值同,可以看到虚拟相机会在纵向的这条弧线上移动,假如我们想修改相机在特定的绑定区域上的视野,

比如相机如果陷入地面的情况,我们可以取消这个属性,

然后自定义Lens里面的参数,

最后再修改Spline Tension这个属性值,我们就可以修正相互在每个点之间的移动,较低的值可以让相机有一个直线的移动,较高的值可以获得曲线移动。调整这些数值达到一个最佳的效果应用到你的工程里。
值得注意的是,我们可以把这些数值录制成动画,用在剪辑里面。或者使用自定义脚本来控制它们。

如果我们不想让玩家控制相机了,可以直接把输入坐标名称删除就可以了。

我们可以手动使用Animator来给它们录制动画,

或者用代码来控制这些数值。

最终效果可以看到使用它来创建一个用户可以自由观察视角的相机只需要简单的几步就可以完成的。

镜头切换
下面我们将介绍Cinemachine的Clear Shot(镜头切换)功能。我们研究如何使用Clear Shot Collider组件配合多个虚拟相机,在角色移动的时候去切换镜头。

场景中的角色会在鼠标点击以后移动到对应的位置。现在我只使用了单个虚拟相机来追踪她。
通常在这类的冒险游戏里会有很多个相机散布在场景里,然后根据角色自身的移动来切换相机。使用Cinemachine的Clear Shot便可以轻松实现这个功能。

首先我们要把它创建出来,在菜单的这个地方完成创建,

选中它,我们可以看到它的属性,看到虚拟子相机属性,我们可以在此设置所有场景中要用到的镜头,

创建完成以后会自动生成一个虚拟相机作为子对象,再把已经存在的虚拟相机都作为它的子对象吧,

点击加号再增加一个虚拟相机。

然后告诉它们要追踪哪一个对象,

我们还需要给每一个子相机添加碰撞组件,这个组件是用来计算什么时候进行镜头切换的,

在碰撞组件上我们可以设置碰撞层,本示例使用默认层。

还需要将每一个子相机的“保持视线”取消勾选,这样相机会在自己的位置上停留。

请看这个属性,

或者相机列表尾端的这个属性,调整这个值可以设置相机的优先权重,Cinemachine会优先使用拥有较高的值的相机。

另外,如果勾选随机抽取,便会随机使用一个镜头。

运行一下看看,当角色走出一个相机的碰撞区便会切换到另一个相机镜头。

调整每个相机的“最佳目标距离",可以让相机选择最佳的目标点,需要多多实践来获取最佳值。

最后我要把镜头融合变换选择为Cut,可以看到,使用Cinemachine可以简单快速的完成镜头切换功能,轻松创建各类游戏的视觉体验。

感谢Shallot夏洛特大佬的分享。