Cinemachine(四)在路径/轨道上移动的摄像头(Cinemachine Dolly Camera,Path And Cart)

部署运行你感兴趣的模型镜像

前言

在很多游戏的开场动画或者CG里,我们往往会碰见一些很酷炫的镜头效果。例如一个场景,我们的画面会从远处可以观察到整个场景到被拉近视角观察到场景中的主角。又或者一些CG动画中,我们的视角会像一直飞翔的老鹰一样,掠过整个场景。

              

想要实现这样的效果,我们不能仅仅让我们的摄像机简单的看向和跟随一个目标,而是期望我们的相机能够按照一定的路径运动。

想要我们的摄像机按一定的路径进行,那么首先我们就要绘制出这个轨道,否则相机无法知道自己应该往哪走。Cinemachine为我们提供了Dolly Paths来实现路径的绘制。

 

Dolly Paths

使用Dolly Path就可以指定出一个特定的路径来供我们的VirtualCamera,例如下图:

图中的绿色的路径就是我们的相机的移动路径,它由图中的三个白点(0,1,2三个小圆球)连线而成。这些小白点,我们称之为waypoint。我们可以通过添加删除以及修改waypoint,来绘制我们想要的路径。

Cinemachine为我们提供了CinemachinePathCinemachineSmoothPath两种组件用于绘制路径。

 

CinemachineSmoothPath

在上面图中的路径,我们是用CinemachineSmoothPath来实现的,其内容如下图:

其中路径中的0,1,2三个点即对应着组件中Waypoints数组的成员。每个waypoint包含XYZ的坐标信息,以及Roll的旋转信息。waypoint之间的连线方式使用了贝赛尔曲线的插值法(Bezier interpolation),因此我们不需要进行太多的设置,Cinemachine就会帮我们绘制好光滑且连续的路径。推荐使用。

接下来,我们来看看组件中各个属性的具体含义:

Resolution

定义了waypoint之间路径的精确度,即被分为多少段,会影响到路径长度的计算。

例如下面三张图的效果,Resolution的值分别为:1,2,10:

                    

Path Color

Scene视图中,选中路径时,显示的颜色。

Inactive Path Color

Scene视图中,未选中路径时,显示的颜色。

Width

Scene视图中,路径的宽度。

Looped

勾选该选项,路径会首尾相连。例如下图,左图是不勾选的情况,右图是勾选了的情况:

                        

Path Length

路径的总长度。

Waypoints

waypoint的数组。

Waypoint.Roll

即waypoint点围绕着z轴的旋转,默认为0,我们的路径会平行于xz平面,若旋转90度,则会垂直于xz平面。例如下图中,左图我们下标1的waypoint的roll = 0,右图我们下标1的waypoint的roll = 90。

                               

 

CinemachinePath

CinemachinePath相比CinemachineSmoothPath区别主要在于,waypoint的属性中除了Position和Roll外,还多了Tangent属性。该属性主要用于调整waypoint间路径的弯曲程度,由于是我们自己调整的,因此若调整的不好,在Camera经过两段路径的接连处时,可能会出现抖动的情况。

大部分属性基本和前面的一样,就不重复介绍了。

Prefer Tangent Drag

如果我们要在Scene视图中通过拖动来调整Tangent时,但是此时Tangent的坐标系和waypoint的坐标系重叠时(即Tangent的值为Vector.zero),会发现点不到Tangent的坐标系。那么此时我们打开这个开关,就可以帮助我们优先选中的是Tangent的坐标系。

Waypoint.Tangent

我们可以理解为,有一个点,它到waypoint的偏移量为tangent的值。它和waypoint的连线,即该waypoint的曲线的切线。如下图:

切线的长度代表着bezier handle的强度,长度越长,曲线越平滑。

 

Tracked Dolly

根据前面的知识,我们已经可以绘制自己想要的路径了。那么,接下来,我们要如何让我们的Camera在路径上移动?在设置VirtualCamera的时候,我们知道,当给VirtualCamera设置了Follow目标时,Camera就可以跟随着我们设置的目标移动,而通过设置Body属性,可以设置相关的跟随方式。在Body中Cinemachine为我们提供了Tracked Dolly模式,用于实现Camera在路径上移动,具体设置如下:

老规矩,先来看看这些属性的含义:

Path

即VirtualCamera要使用到的路径,也就是我们前面提到的Cinemachine Path 或 Cinemachine Smooth Path。

Path Position 和 Position Units

Position Units的值会影响到Path Position的意义,因此放在一起说:

Position Units 取值含义
Path UnitsPath Position取值范围 0~waypoints.Length-1,如Path Position=1,VirtualCamera即在下标1的waypoint所在的位置。
Distance

Path Position取值范围 0~Path Length,如Path Position=1,VirtualCamera即在距离起点长度为1的位置。

NormalizedPath Position取值范围 0~1,如Path Position=1,VirtualCamera即在路径的终点。

Path Offset

VirtualCamera位置相对于Path的偏移,X的方向在Path所在平面且垂直于Path,Y的方向是Path的正上方,Z的方向在Path所在平面且与Path平行。会受到path旋转的影响,即waypoint的roll值。

                                     

Camera Up

如何设置VirtualCamera.transform.up的值,VirtualCamera在Aim计算时,会尝试遵守这个值。

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

使用Auto Dolly,可以自动将VirtualCamera移动到Path上最接近Follow目标的位置。这样当我们Follow目标移动的时候,Path上的VirtualCamera会跟着移动到最接近我们目标的位置。

Enabled

开启或关闭Auto Dolly功能,开启该功能对性能会造成一定的影响。

Position Offset偏移量(基于position units),Camera的最终在Path上的位置 = 最近的点 + 偏移量。
Search Radius

搜索半径,我们的Path是根据waypoint一段段连接起来的,这个半径指的是,在VirtualCamera所在的当前片段,向两边延伸多少个片段,作为搜索范围。若为0,则表示整个Path都作为搜索范围。

如果当目标移动时,Path上计算出的最近点不稳定,我们可以使用较小的值来缩小范围。

Search Resolution将一个片段分成多少连续的块用于搜索。值越高结果越精确,但是消耗的性能也会更高。

不过需要注意的是,在某些情况下,我们目标移动一点点,但是导致Camera在Path上位移了一大段距离,例如下图:

甚至一些极端的情况,例如圆形的Path,目标在圆心,那么Path上的任何一个点到目标的距离都是最小距离。

 

Cinemachine Dolly Cart

如果想要我们的Camera自动在Path上移动,那么Cinemachine Dolly Cart组件可以帮助到我们。它可以约束带有它的GameObject在Cinemachine Path或Cinemachine Smooth Path上移动。效果如下:

属性

Cinemachine Dolly Cart的属性如下

Path

即指定一个Cinemachine Path或Cinemachine Smooth Path。

Update Method

速度不为0时,移动Cart的时机。对于普通的组件更新使用Update,若想要同步物理模块,使用Fixed Update

Position Units与Position

Tracked Dolly中的相同,不重复介绍了。

Speed

Cart的移动速度,同样受到Position Units的影响。

 

应用

在工具栏中Cinemachine提供了Create Dolly Camera with Track 和 Create Dolly Track With Cart两个快捷方式。

 

Create Dolly Camera with Track

可以帮我们创建一个VirtualCamera和一个Cinemachine Smooth Path,并且为我们设置好了Body的Tracked Dolly,与关联好了对应的Path。

此外我们也可以自己创建新的GameObject,添加Cinemachine Path或Cinemachine Smooth Path组件,并关联到VirtualCamera上。

接着通过添加删除修改waypoint就可以编辑我们的Path了。

 

Create Dolly Track With Cart

可以帮我们创建一个Cinemachine Smooth Path和一个Cinemachine Dolly Cart,同样关联好Cart的Path属性。

通常我们会将VirtualCamera的Follow目标设置为Cart,Body设置为Hard Lock To Target,这样我们的VirtualCamera就会和Cart同步移动了。

 

 

 

 

 

您可能感兴趣的与本文相关的镜像

Kotaemon

Kotaemon

AI应用

Kotaemon 是由Cinnamon 开发的开源项目,是一个RAG UI页面,主要面向DocQA的终端用户和构建自己RAG pipeline

在Unity中使用Cinemachine轨道相机(Dolly Track)可以实现摄像机沿着预定义路径的自动移动,常用于创建电影级的镜头运动效果。以下是关于Cinemachine轨道相机的基本使用方法及常见问题的解决方式。 ### 创建轨道路径Dolly Track) 在使用轨道相机之前,需要先创建一条路径,供摄像机沿该路径移动。具体步骤如下: 1. 在Unity编辑器中,选择菜单栏的 `GameObject > Cinemachine > Cinemachine Dolly Track`,这将创建一个新的Dolly Track对象。 2. Dolly Track默认包含一个样条曲线(Spline),可以在Scene视图中通过拖动控制点来调整路径的形状。 3. 跨整路径时,可以通过添加、删除或移动路径点来构建所需的轨迹。 ### 绑定虚拟相机到轨道小车(Tracked Dolly) 接下来,需要将虚拟相机绑定到轨道上,并设置其沿轨道移动的行为: 1. 创建一个Cinemachine Virtual Camera,并确保其 `Body` 部分的 `Tracked Dolly` 选项被选中。 2. 在 `Tracked Dolly` 设置中,指定之前创建的Dolly Track作为目标路径。 3. 设置 `Path Position` 参数,控制摄像机在轨道上的初始位置,可以是路径的起点、终点或中间某个百分比位置。 4. 如果希望摄像机在运行时自动沿轨道移动,可以启用 `Auto Drive` 选项,并设置速度值[^1]。 ### 解决轨道相机不按前进方向移动的问题 在某些情况下,当轨道存在交叉或路径点过于接近时,Cinemachine可能会出现“跳跃”现象,即摄像机没有按照预期的前进方向移动,而是跳回到路径的其他部分。 为了解决这一问题,可以采取以下措施: - **确保路径连续性**:检查Dolly Track上的路径点是否连续且无交叉,避免路径点之间的距离过短。 - **调整样条曲线模式**:在Dolly Track组件中,选择适当的样条曲线模式(如 `Linear` 或 `Catmull Rom`),以确保路径的平滑性和可预测性。 - **手动指定路径方向**:在某些复杂路径中,可能需要通过脚本控制摄像机的位置,确保其始终沿着正确的方向前进。例如,可以使用 `SplineUtility.GetNearestPoint` 方法来获取当前摄像机位置最近的路径点,并计算前进方向[^2]。 以下是一个简单的脚本示例,用于控制轨道相机沿路径前进: ```csharp using Cinemachine; using UnityEngine; public class DollyController : MonoBehaviour { public CinemachineDollyCart dollyCart; public float speed = 1f; void Update() { // 沿路径前进 dollyCart.m_Position += speed * Time.deltaTime; } } ``` 将该脚本附加到包含 `CinemachineDollyCart` 组件的对象上,并指定适当的速度值即可实现摄像机沿路径的自动移动。 --- ###
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值