前言
通过Cinemachine提供的组件可以让我们的摄像机沿着自定义的轨道来匀速运动,完成这个功能需要三个必要部分:
摄像机 (Virtual Camera)
轨道路径 (Dolly Track)
轨道小车 (Dolly Cart)
该功能可由两种方式实现,不过都是大同小异。
方法一是三个部分都独立开,将虚拟相机的Body选择Tracked Dolly并使用AutoDolly功能,该方法是让摄像机根据绑定的Follow对象(也就是轨道小车)做自动沿轨道运动。
方法二是将虚拟相机放在轨道小车下,虚拟相机Body选择Do Nothing即可跟随着轨道运动。
方法一、使用AutoDolly
第一步:创建轨道路径(Dolly Track)
创建空物体,添加CinemachineSmoothPath或者CinemachinePath组件绘制路线。
CinemachineSmoothPath的话,路径弯曲会被自动平滑
CinemachinePath的话,路径的曲度可以通过弯曲的曲线自己调整
这里我使用CinemachineSmoothPath,然后在Scene自由编辑每个路径点(waypoint)的位置和旋转角度。
这里具体的参数含义就不过多介绍了,只说明一下用到的:
Resolution:代表路径的精细度,数值越大,路径点之间的分段就越多
Looped:路径是否头尾相连
Waypoints:自定义的路径点,其中Roll代表翻转角度
第二步:创建轨道小车(Dolly Cart)
创建空物体,添加CinemachineDollyCart组件,作用就是让这个物体作为轨道的小车随着轨道进行运动
这里使用到的参数设置如下:
Path:选择对应的轨道路径
Speed:轨道小车运动的速度
第三步:创建虚拟摄像机(Virtual Camera)
创建一个CinemachineVirtualCamera,对应的设置如下
Follow:代表相机要跟随的目标,选择刚刚创建的轨道小车(Dolly Cart)
Body:代表相机运动的算法,选择Tracked Dolly,进行跟踪轨道运动
Path:代表要跟踪的路径,选择刚刚创建的Dolly Track
Camera Up:代表运动时摄像机的朝上坐标,根据自己要的效果选择,这里我选择Path
Default -> 不修改VirtualCamera的up的值,使用Cinemachine Brain中World Up Override属性代替。
Path -> 使用当前位置Path的up向量
Path No Roll -> 使用当前位置Path的up向量,但是不受Roll影响
Follow Target -> 使用Follow目标的tramsform.up
Follow Target No Roll -> 使用Follow目标的tramsform.up,但是不受Roll影响
Auto Dolly:控制相机是否自动沿着轨道运动
Enabled:开启该功能,若不勾选,只会看到Dolly Cart在移动,但是摄像机不会跟着动,切记一定要勾选
这里提醒一下,要想Cinemachine的相机起作用,确保你的主相机上面绑定了CinemachineBrain这个组件
方法二、绑定虚拟相机在轨道小车上
第一步:创建轨道路径(Dolly Track)
同方法一
第二步:创建轨道小车(Dolly Cart)
同方法一
第三步:创建虚拟摄像机(Virtual Camera)
创建一个CinemachineVirtualCamera,对应的设置如下
Follow:不需要绑定
Body:选择Donothing
将该相机放在轨道小车(Dolly Cart)下即可
性能区别
理论上来说应该方法二性能上会比方法一好并且稳定一点,因为相机本身不用再去做AutoDolly里面的东西,但是经过测试(没有做很严谨的测试,也不是暴力测试),发现两者之间的性能都差不多,可能是因为用的设备能力有限(还是在HDRP的环境下)。
可能随着环境和程序的复杂度增加,他们之间的性能表现情况对比才能放大。