Cinemachine系列——CinemachineBrain & CinemachineVirtualCamera
CinemachineBrain
CinemachineBrain 是 Unity 摄像机与场景中的 Cinemachine 虚拟摄像机之间的链接。它监控优先级堆栈以选择当前的虚拟摄像机,并在必要时进行混合。最后,也是最重要的一点,它将虚拟摄像机的状态应用到附加的 Unity 摄像机上。
CinemachineBrain 还定义了虚拟摄像机之间混合的规则。摄像机混合是一个虚拟摄像机位置和状态到另一个的时间插值。如果将虚拟摄像机视为摄像师,那么混合就像一个摄像师将摄像机平滑地传递给另一个摄像师。你可以指定混合的时间,以及混合曲线的形状。请注意,摄像机切换仅仅是一个零时间的混合。
Show Debug Text
会在屏幕左上角显示当前激活的摄像机和使用的虚拟摄像机
Show Camera Frustum
启用后,会在场景中显示启用摄像机的视锥体
World Up Override
如果设置了此项,该对象的 Y 轴将定义所有虚拟摄像机的世界空间上向量。这在俯视角游戏环境中很有用。如果未设置,则上向量为世界空间的 Y 轴
Update Method
根据目标对象的动画方式,调整更新方法以最小化潜在的抖动。如果所有目标都是通过刚体动画进行动画化的,请使用 FixedUpdate。SmartUpdate 将根据目标的动画方式为每个虚拟摄像机选择最佳方法。
(目前理解:如果摄像机视野中的目标抖动剧烈,换个模式看看说不定就正常了)
Default Blend
如果你没有明确定义两个虚拟摄像机之间的混合,则使用此混合
Custom Blends
设置特定混合自定义设置的资产
(目前理解:应该是让使用者自定义混合模式,感觉非很特殊的游戏,用处不大,官方提供的那些应该够用了)
CinemachineVirtualCamera
此行为旨在附加到一个空的 Transform 游戏对象上,并表示 Unity 场景中的虚拟摄像机。
虚拟摄像机将根据其 CinemachineComponent 管道中的规则(瞄准、机身和噪声)动画化其 Transform。当虚拟摄像机处于活动状态时,Unity 摄像机将假定虚拟摄像机的位置和方向。
虚拟摄像机并不是一台摄像机。相反,可以将其视为摄像机控制器,有点像摄像师。它可以驱动 Unity 摄像机并控制其位置、方向、镜头设置和后期处理效果。每个虚拟摄像机拥有自己独特的 Cinemachine 组件管道,通过该管道可以提供动态跟踪特定游戏对象的指令。
虚拟摄像机非常轻量,不会进行自己的渲染。它仅跟踪有趣的游戏对象,并相应地定位自己。一个典型的游戏可以拥有数十个虚拟摄像机,每个虚拟摄像机都设置为跟随特定角色或捕捉特定事件。
虚拟摄像机可以处于三种状态之一:
- Live:虚拟摄像机正在主动控制 Unity 摄像机。虚拟摄像机正在跟踪其目标,并且每帧都在更新。
- Standby:虚拟摄像机正在跟踪其目标,并且每帧都在更新,但没有 Unity 摄像机正在被其主动控制。这是一个在场景中启用但优先级可能低于活动虚拟摄像机的虚拟摄像机的状态。
- Disabled:虚拟摄像机存在于场景中但已禁用。它并不主动跟踪其目标,因此不会消耗处理能力。然而,虚拟摄像机可以通过时间线(Timeline)变为活动状态。
Unity 摄像机可以由场景中的任何虚拟摄像机驱动。游戏逻辑可以通过操控虚拟摄像机的启用标志和优先级来选择使虚拟摄像机活动。
为了被虚拟摄像机驱动,Unity 摄像机必须具有 CinemachineBrain 行为,该行为将根据优先级或其他标准选择最合适的虚拟摄像机,并管理混合。
Game Window Guides
当 Look At 指定一个游戏对象且 Aim 部分使用 Composer 或 Group Composer,或者当 Follow 指定一个目标且 Body 部分使用 Framing Composer 时,在 Game 视图中,显示参考线。
- Dead Zone(透明区域): 当我们的target(小黄点)在这个区域时,VirtualCamera不会调整rotation值。适用于忽略target进行一些微小的移动的情况。
- Soft Zone(蓝色区域):当我们的target进入到这个区域时,VirtualCamera将会通过调整rotation值,重新把target放回到dead zone。这步操作的快慢,我们可以通过Damping来设置。
- No Pass Area(红色区域):我们的target永远不会进入到这个区域。
Save During Play
开启后,可以在运行状态下直接保存我们对VirtualCamera设置的修改,而不需要我们通过复制粘贴的方式来记住这些修改了的属性。当我们停止运行时,会扫描我们修改过的属性进行保存,我们可以使用ctrl+z来回退这些修改。和Game Window Guides一样,是一个应用于所有VirtualCamera的设置。
Priority
值越高表示优先级越高。Cinemachine Brain 从所有已激活且与当前实时虚拟摄像机具有相同或更高优先级的虚拟摄像机中选择下一个实时虚拟摄像机。将 Virtual Camera 与 Timeline 一起使用时,此属性不起作用。
Follow
跟随目标,即VirtualCamera会跟着设置的目标移动而移动。会根据Live状态的VirtualCamera所设置的目标结合Body中的设置来更新Camera的Position。若不设置目标,Camera的Position就会与VirtualCamera同步。例如我们可以用Timeline来给VirtualCamera添加动画,然后Camera也会产生相同效果。
Look At
看向目标,即Camera看向的目标(Transform.LookAt)。会根据Live状态的VirtualCamera所设置的目标结合Aim中的设置来更新Camera的Rotation。若不设置目标,Camera的Rotation就会与VirtualCamera同步。
Standby Update
设置处于Standby状态的VirtualCamera的更新频率(2.6.3新增),有如下三个选项
- Always:每帧更新
- Never:不更新
- Round Robin:偶尔更新,具体更新频率取决于Standby状态的VirtualCamera数量
(话说设置成always和round robin不知道有何作用,我们也看不到具体效果来着。)
Lens
如下三个设置和Camera中的相同设置所对应,Camera中的值会跟此同步。例如一个带有CinemachineBrain的Camera,当它对应的Live状态的VirtualCamera的FOV值改为77,那么Camera中的FOV值也会相应的变为77。
- FOV:控制Camera的视窗大小
- Near Clip Plane:Camera最近能看见的距离
- Far Clip Plane:Camera最远能看见的距离
- Dutch:用于修改Camera中Rotating的z轴值,取值范围 -180~180,修改的话,会发现以朝向屏幕内方向为轴进行旋转
Field Of View右侧下拉框,可以预设好的Lens文件,帮助我们快速设置Field Of View数据。
Transitions
BlendHint
当一个VirtualCamera混合到另一个VirtualCamera的过程中,Camera会有一个行径的路线,并且伴随着Camera的旋转。该设置可以选择混合到该VirtualCamera或从该VirtualCamera混合到别的时的路线方式。
- None:坐标和朝向以一种标准的线性混合
- SphericalPosition:如果两个VirtualCamera有共同的LookAt目标,那么坐标的行径路线会像在圆的面上一样。
- CylindricalPosition:如果两个VirtualCamera有共同的LookAt目标,那么坐标的行径路线会像在圆柱的面上一样。
- ScreenSpaceAimWhenTargetsDiffer: 摄像机在切换位置时走直线,但在切换视线时会走一个圆弧形的路径。
Inherit Position
开启时,当VirtualCamera状态变为Live时,则会继承上一个Live状态的VirtualCamera的Position信息
Body
Do nothing
这个算法不会自动移动虚拟摄像机,它保持摄像机的位置不变。你可以使用这个算法来实现 静态镜头(摄像机不动,场景中的内容变化),或者当你希望通过自己的代码或脚本直接控制摄像机位置时,也可以用它。
简单来说,它适用于两种情况:
- 静态镜头:摄像机固定在一个位置不动。
- 手动控制:你自己用代码或动画控制摄像机移动,而不是让算法自动处理。
3rd Person Follow
简单来说,它能让摄像机始终跟随一个目标,并保持一定的距离和位置。
具体解释如下:
- 跟随目标的移动:3rd Person Follow 模式会让摄像机一直跟随目标,不管目标怎么移动或旋转,摄像机都会保持固定的距离和角度。不过,这个跟随过程是平滑的,可以通过缓动设置(damping)控制跟随的速度和平滑度。
- 摄像机位置设置:通过 mini-rig 设置,你可以调整摄像机相对于目标的位置和距离。比如,调整摄像机位置到角色肩膀上方,就能实现常见的第三人称视角——角色在屏幕中略偏,而摄像机从角色背后或肩膀上方观察。
- 灵活的视角切换:如果你调整 mini-rig 的参数,还可以让摄像机变成第一人称视角,视角就像从角色眼睛看到的一样。
简单来说,3rd Person Follow 既能让你实现第三人称视角,也能通过调节参数变成第一人称视角,全程都会跟随目标的动作。
Framing Transposer
Framing Transposer 是一种让虚拟摄像机跟随目标的算法,它的作用是让摄像机始终保持和目标在屏幕上的固定位置关系。
具体来说,它是这样工作的:
固定跟随:摄像机会跟随目标,始终保持目标在屏幕上的某个固定位置。你可以设置偏移量(调整目标在屏幕上的位置)、缓动效果(跟随时的平滑度)和构图规则(如何把目标摆在屏幕中)。
只改变摄像机的位置:Framing Transposer 只会调整摄像机的空间位置,而不会改变它的朝向或角度。也就是说,它不会让摄像机“瞄准”目标,摄像机的视角不变。
适用于 2D 和 3D:虽然这个算法是为 2D 和正交(无透视效果)摄像机设计的,但也可以很好地应用于 3D 场景和透视摄像机。
工作流程:
- 第一步:摄像机会沿着自己的 Z 轴移动,确保跟随的目标和摄像机之间保持合适的距离。
- 第二步:摄像机会在自己的 X-Y 平面内移动,直到目标位于屏幕上的指定位置。
注意:要使用这个算法,必须把“Look At”属性留空,这样摄像机才能只移动而不去“瞄准”目标。
这样摄像机会自动调整位置,确保你的目标对象在屏幕上始终处于你设定的地方,但摄像机不会调整视角或方向。
Hard Lock To Target
这个算法让虚拟摄像机的位置 完全跟随目标的位置。简单来说,虚拟摄像机会固定在目标上,就像把摄像机安装在目标上一样。无论目标怎么移动,虚拟摄像机都会始终和目标保持同样的位置,等于让摄像机“绑”在目标上。
比如,如果你的目标是一个角色,那么摄像机会始终跟随这个角色的每一个动作,完全和角色保持同样的移动,不会有任何位置上的偏移。
Orbital Transposer
它可以让摄像机与目标之间保持灵活的关系。
以下是具体的解释:
- 灵活的摄像机位置:这个算法允许摄像机根据目标的位置变化而调整自身的位置,同时也可以根据玩家的输入来动态改变摄像机的位置。比如,玩家可以通过控制器来调整摄像机在目标周围的位置。
- 目标方向:Orbital Transposer 引入了一个概念叫做“方向”或“heading”,它表示目标正在朝向的方向。算法的目标是让摄像机面向与目标移动或面对的方向,通常情况下,摄像机的位置会在目标的正后方。
- 调整方向:玩家可以通过调整 Heading Bias 属性来控制摄像机相对于目标的具体位置,比如是否让摄像机偏向左侧或右侧。
- 玩家控制:如果你把输入控制器连接到 Orbital Transposer,玩家可以通过控制器来移动摄像机,使其在目标周围的轨道上自由移动。这种输入可以通过 Unity 的输入管理器设置,或者使用自定义的输入系统。
- 自动重新中心:Orbital Transposer 还可以自动将摄像机重新定位到目标的方向。当选中 Recenter To Target Heading 时,如果一段时间内没有检测到玩家的输入,摄像机会自动回到目标的正面。这种重新中心化的过程可以通过设置等待时间和速度来调整。
简单来说,Orbital Transposer 让摄像机能够灵活地跟随目标,并允许玩家根据需要自由调整摄像机的位置和视角,同时也能在玩家没有输入时自动回到目标的方向。
Tracked Dolly
它允许摄像机沿着一个预先定义的路径移动。以下是具体的解释:
- 路径限制:这个算法使得虚拟摄像机只能在设定好的路径上移动,无法自由移动。这就意味着你需要提前规划好摄像机要走的路线。
- 路径位置:通过 Path Position 属性,你可以指定虚拟摄像机在这条路径上的具体位置。比如,你可以设定摄像机在路径的开始、中间或结束位置。
- 自动移动到最近点:启用 Auto-Dolly 模式后,摄像机会自动移动到离跟随目标最近的路径位置。也就是说,摄像机会自己寻找与目标最近的点,并自动调整位置,这样可以更好地跟随目标。
- 使用提示:使用 Auto-Dolly 模式时,需要小心选择路径的形状。尤其是在路径形成弧形时,可能会出现问题。例如,如果路径是一个圆形,而跟随目标在圆心,那么无论摄像机的位置如何,路径上的所有点与目标的距离都是一样的。这会导致摄像机在目标移动时表现出不稳定的行为,可能会发生意想不到的快速移动。
例子说明:当目标在圆形路径的中心移动时,摄像机可能会因为最近点的计算而移动很远,这就会造成摄像机和目标之间的距离突然增大或减小,影响画面效果。
Transposer
它使摄像机保持在一个固定的偏移位置,并且可以根据目标的动作进行调整。以下是更详细的解释:
- 固定偏移:这个算法让虚拟摄像机与跟随目标之间保持一个固定的距离和方向,也就是说,无论目标如何移动,摄像机都将以相对固定的方式在其后面或侧面保持一定距离。
- 应用缓动:这个算法还会应用缓动效果(damping),即在摄像机跟随目标时,会让摄像机的移动更加平滑,而不是突然变化。这样可以减少画面抖动,提升观感,使得摄像机的移动更自然。
绑定模式的影响:固定偏移的具体效果会根据 绑定模式(Binding Mode)的不同而有所变化。绑定模式决定了摄像机如何与目标的位置关系。例如,某些绑定模式可能会让摄像机在目标运动时更加紧密跟随,而其他模式可能会让摄像机保持一个更远的距离。
Aim
Do Nothing
- 不进行瞄准:这个算法本身不会改变虚拟摄像机的瞄准方向。这意味着使用这个算法时,摄像机不会自动跟随或调整视角来对准某个目标。
- 适用于静态镜头:你可以选择这个算法用于静态镜头,也就是说,摄像机的位置和方向在拍摄过程中是固定的,不会变化。这样的镜头适合展示场景或物体,而不需要摄像机动态跟随。
- 自定义旋转:如果你希望通过编写自定义脚本来直接控制摄像机的旋转,这个算法也是一个不错的选择。通过脚本,你可以精确控制摄像机的旋转方式,可能用于制作特定的动画效果。
Composer
- 朝向目标:这个算法会让摄像机自动旋转,使其面向你指定的“查看目标”。例如,如果目标是一个角色的头部,摄像机将会调整方向以始终对准角色的头部。
- 应用偏移:在瞄准目标时,这个算法可以添加偏移,这意味着摄像机不一定需要完全位于目标的中心,可能会稍微偏离目标。这种偏移可以用来创造更有趣的视角或构图。
- 缓动效果:算法还会应用缓动(damping)效果,使得摄像机的旋转更加平滑,而不是突然跳转到目标。这种平滑效果可以增强观感,使得摄像机的动作更自然。
- 构图规则:算法会遵循一些构图规则,这可能包括如何在画面中安排元素,以创造出更美观和引人注目的镜头。例如,遵循“三分法则”或其他构图原则。
Group Composer
- 对准多个目标:这个算法的主要功能是让摄像机能够同时对准多个游戏对象。这在需要关注多个角色或物体的场景中非常有用,比如一场战斗或比赛,摄像机可以同时跟踪多个目标。
- 与 Composer 一致:除了能够对准多个目标之外,这个算法的行为与 Composer(另一种摄像机瞄准算法)是相同的。也就是说,它们的设置和功能几乎完全一样,用户可以方便地使用相同的参数进行调整。
- 目标组处理:如果所选的“查看目标”是一个 Cinemachine 目标组,那么这个算法会特别处理这些目标的视野和距离。具体来说,算法会自动调整摄像机的视场(FOV,Field of View)和与目标之间的距离,以确保所有的目标都能够在画面中合理地展示。
正确框住目标:调整视野和距离的目的是确保所有目标都被适当地框住在画面内,这样可以避免有目标被切掉或看不到的情况。这对于提供良好的视觉效果和观众体验非常重要。
POV
这个虚拟摄像机的瞄准算法会根据用户的输入来调整摄像机的朝向。也就是说,当用户通过控制器、鼠标或其他输入设备进行操作时,摄像机会相应地转动,以便对准用户所指定的方向或目标。这种功能通常用于需要玩家主动控制摄像机视角的游戏场景,比如射击游戏或动作冒险游戏,让玩家可以更灵活地观察环境。
Same As Follow Target
这个虚拟摄像机的瞄准算法会让摄像机的朝向与跟随目标保持一致。当与 “硬锁定目标”(Hard Lock to Target)算法一起使用时,这个算法可以让虚拟摄像机的旋转和路径完全匹配一个控制游戏对象。
具体来说:
- 匹配朝向:当摄像机使用这个算法时,它会始终朝向所跟随的目标,确保摄像机的视角与目标的方向保持一致。
- 与硬锁定目标一起使用:如果同时使用“硬锁定目标”算法,摄像机会完全跟随一个控制游戏对象的位置和旋转。这意味着摄像机不仅在朝向上匹配目标,还会在运动轨迹上与目标保持一致,确保画面中的目标始终处于预定的位置和角度。
这个功能通常用于需要精确跟随目标的场景,比如跟随角色或物体的动态场景,以提供更流畅和自然的视角。
Noise
Basic Multi Channel Perlin
在 Cinemachine 摄像机的游戏对象中使用 基本多通道 Perlin(Basic Multi Channel Perlin)组件,以通过 Perlin 噪声运动来模拟摄像机的抖动效果。Perlin 噪声是一种计算伪随机运动的技术,能够产生自然的运动行为。
具体来说:
- 摄像机抖动:使用这个组件可以给摄像机添加抖动效果,使得画面看起来更生动,比如在爆炸、冲击或快速移动时,摄像机会产生自然的抖动。
- 噪声配置文件:基本多通道 Perlin 组件会应用一个 噪声配置文件资产(Noise Profile Asset),这个资产定义了噪声在时间上的表现方式。通过这个配置文件,可以控制抖动的强度、频率等参数。
- 自带噪声资产:Cinemachine 自带了一些噪声配置文件资产,用户可以对这些资产进行编辑,也可以创建自己的噪声配置文件,以满足特定的需求。
参考
[1]. https://docs.unity3d.com/Packages/com.unity.cinemachine@3.1/manual/index.html
[2]. https://chatgpt.com/
[3]. https://blog.csdn.net/wangjiangrong/article/details/108726387
本文作者:陈侠云
本文链接:https://www.cnblogs.com/chenxiayun/p/18492570
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步