
摘要:【长文预警,先收藏后品尝】Cinemachine中的虚拟相机如何跟随目标物体呢?这就需要搞明白Body属性的设置咯。
你好,我是跟着大智学Unity的萌新,我叫小新,这是我本周的学习总结报告哦。
自从咱们一起5分钟入门Cinemachine之后,上周我和你一起学习了Cinemachine中的VirtualCamera的基本用法,今天咱们来学习一下它的Body属性。 【长文预警,先收藏后品尝】Cinemachine中的虚拟相机如何跟随目标物体呢?这就需要搞明白Body属性的设置咯。

CinemachineVitualCamera组件中的Body属性用于设置相机移动时使用什么算法。需要先设置好上面的Follow属性。

Cinemachine包含以下移动相机的算法:

Do Nothing:不移动虚拟相机
Framing Transposer:跟随目标移动,并在屏幕空间保持相机和跟随目标的相对位置。
Hard Lock to Target:虚拟相机和跟随目标使用相同位置。
Orbital Transposer:相机和跟随目标的相对位置是可变的,还能接收用户的输入。常见于玩家控制的相机。
Tracked Dolly:相机沿着预先设置的轨道移动。
Transposer:跟随目标移动,并在世界空间保持相机和跟随目标的相对位置固定。
选中这个算法时,虚拟相机激活时,会控制Unity相机会固定在当前虚拟相机的位置,不会移动。用于固定位置的镜头,也可以通过自定义脚本来控制相机的位置。通常和Look At配合使用,模拟固定位置的跟随镜头。

选中这个算法时,Cinemachine会在屏幕空间将相机和跟随物体保持固定的相对位置关系。只会改变相机的位置,不会改变相机的旋转。还可以设置偏移、阻尼、构图规则等等。
Framing Transposer算法是为2D和正交相机设计的,主要用于2D情况。但是对于透视相机和3D环境也可以使用。
这个算法工作流程大概是:首先沿着相机的Z轴移动相机直到Camera Distance距离的XY平面上,然后在XY面上平移,直到目标物体在屏幕空间到达期望的位置。 特别注意:使用Framing Transposer时,Look At属性必须为空。
如果Follow属性是一个Target Group(后面会讲到),会有额外的设置。
属性详解
Lookahead Time:根据目标的运动,调整虚拟相机与“跟随”目标的偏移量。Cinemachine预测目标在未来数秒之内到达的位置并提前设置Unity相机的位置。这个功能对微动的动画敏感,并且会放大噪点,导致非预期的相机抖动。如果不能接受目标运动时的相机抖动,减小这个属性可能会使相机动画更流畅。 Lookahead Smoothing:预测算法的平滑度。较大的值可以消除抖动但会使预测滞后。 Lookahead Ignore Y:如果选中,在预测计算时会忽略沿Y轴的移动。
X Damping:相机在X轴上移动的阻力系数。较小的值会使相机反应更快。较大的值会使相机的反应速度变慢。每个轴使用不同的设置可以制造出各种类型相机的行为。 Y Damping:相机在Y轴上移动的阻力系数。较小的值会使相机反应更快。较大的值会使相机的反应速度变慢。 Z Damping:相机在Z轴上移动的阻力系数。较小的值会使相机反应更快。较大的值会使相机的反应速度变慢。

各区域示意图
Screen X:目标的水平屏幕位置。相机移动的结果是使目标处于此位置。 Screen Y:目标的垂直屏幕位置,相机移动的结果是使目标处于此位置。 Camera Distance:沿摄像机Z轴与跟随目标保持的距离。 Dead Zone Width:当目标在此位置范围内时,不会水平移动相机。 Dead Zone Height:当目标在此位置范围内时,不会垂直移动相机。 Dead Zone Depth:当跟随目标距离相机在此范围内时,不会沿其z轴移动相机。
Unlimited Soft Zone:如果选中,Soft Zone没有边界 Soft Zone Width:当目标处于此范围内时,会水平移动相机,将目标移回到Dead Zone中。Damping属性会影响摄像机的运动速度。 Soft Zone Height:当目标处于此范围内时,会垂直移动相机,将目标移回到Dead Zone中。Damping属性会影响摄像机的运动速度。 Bias X:Soft Zone的中心与目标位置的水平偏移。 Bias Y:Soft Zone的中心与目标位置的竖直偏移。
Center On Active:选中时,虚拟相机激活时会将镜头中心对准物体。不选中时,虚拟相机会将目标物体放置在最近的dead zone边缘。
下面的属性仅当Follow属性设置为Target Group时显示。
Group Framing Mode:指定构图时要考虑的屏幕尺寸。
Horizontal 仅考虑水平尺寸。忽略垂直尺寸。
Vertical 仅考虑垂直尺寸。忽略水平尺寸。
Horizontal And Vertical 使用水平和垂直尺寸中较大的那个来获得最佳匹配。
None 不进行任何构图调整。
Adjustment Mode 如何调整相机以获得所需的取景。可以是缩放、拉近拉远或同时进行。
Zoom Only 不移动相机,仅调整FOV。
Dolly Only 移动相机,不修改FOV。
Dolly Then Zoom 将相机移动到范围允许的最大范围,然后根据需要调整FOV。
Group Framing Size:目标应占据的屏幕大小比例。使用1填充整个屏幕,使用0.5填充一半的屏幕,依此类推。
Max Dolly In:朝目标拉近相机的最大距离。 Max Dolly Out:远离目标拉远相机的最大距离。 Minimum Distance: 限制相机可以接近目标的最小距离。 Maximum Distance:限制相机可以远离目标的最大距离。 Minimum FOV:自动调节FOV时的最小值。 Maximum FOV:自动调节FOV时的最大值。 Minimum Ortho Size:自动调节正交尺寸时的最小值。 Maximum Ortho Size:自动调节正交尺寸时的最大值。
Cinemachine Target Group组件可以让多个GameObjects作为一个组,设置为Look At的对象。在虚拟相机中使用Group Composer算法,可以设置Follow属性为这个TargetGroup。
如何创建一个Target Group呢?
1、菜单栏选择Cinemachine > Create Target Group Camera。Unity会在场景中添加一个虚拟相机和Target Group。Follow和Look At属性会自动设置为这个Group。 2、Hierarchy中选中这个Group 3、Inspector上可以点击加号+添加新的物体到这个组 4、点击加号后,设置GameObject、权重和半径。 5、可以重复多次3-4步来添加更多物体。

属性详解 Position Mode 如何计算Group的位置
Group Center 根据所有物体的包围盒计算一个包含它们的大包围盒,Group Center就是这个大包围盒的中心
Group Average 根据所有物体的位置加权重计算平均值
Rotation Mode 如何计算Target Group的旋转
Manual 使用TargetGroup根物体的旋转。推荐设置
Group Average 根据所有物体的旋转加权重计算
Update Method 更新Target Group的Transform的时机
Targets 组内包含的物体列表
Weight 每个对象的权重
Radius 每个物体的半径,用于计算包围盒。不可为负数。
Unity相机保持和目标位置一致,即位置同步。

Damping:相机追赶上目标位置的时间。如果为0,那就是保持同步,如果大于0,相当于经过多少秒相机和目标位置重合。
这个算法支持相机和目标之间的可变相对位置关系。可以接受玩家的输入,动态的控制相机的位置。
Orbital Transposer引入了一个新的概念叫heading,代表了目标移动的方向或面朝的方向。Orbital Transposer会尝试移动相机,让镜头朝向heading的方向。默认情况下,相机的位置会在target的正后面。也可以通过Heading Bias属性设置。
如果给Orbital Transposer添加了输入控制器,玩家就可以控制相机围绕目标旋转。可以设置为Input Manager中的轴,也可以直接用脚本控制。
当Recenter To Target Heading属性选中时,在没有输入时Orbital Transposer可以自动重新居中相机。

属性详解 Binding Mode绑定模式:从目标推断位置时使用的坐标空间。
Lock To Target On Assign:本地空间,相机被激活或target赋值时的相对位置。
Lock To Target With World Up:本地空间,保持相机y轴朝上,yaw和roll为0。
Lock To Target No Roll:本地空间,锁定到目标物体,roll为0。
Lock To Target:本地空间,锁定到目标物体
World Space:世界空间
Simple Follow With World Up:相对于目标的位置,使用相机的本地坐标系,保持相机y轴朝上

Follow Offset:跟随目标时的位置偏移 X Damping:相机在X轴上移动的阻力系数。较小的值会使相机反应更快。较大的值会使相机的反应速度变慢。每个轴使用不同的设置可以制造出各种类型相机的行为。 绑定模式为Simple Follow With World Up时不可用。 Y Damping:相机在Y轴上移动的阻力系数。较小的值会使相机反应更快。较大的值会使相机的反应速度变慢。 Z Damping:相机在Z轴上移动的阻力系数。较小的值会使相机反应更快。较大的值会使相机的反应速度变慢。
【下面3个属性参考上面的飞机图】 Yaw Damping:相机在y轴旋转的阻力系数。较小的数字会使相机反应更快。较大的数字会使相机的反应速度变慢。每个轴使用不同的设置可以制造出各种类型相机的行为。Binding Mode为Lock to Target With World Up、Lock to Target No Roll、Lock to Target时可用。 Pitch Damping:相机在x轴旋转的阻力系数。较小的数字会使相机反应更快。较大的数字会使相机的反应速度变慢。 Binding Mode为Lock to Target No Roll、Lock to Target时可用。 Roll Damping:相机在z轴旋转的阻力系数。较小的数字会使相机反应更快。较大的数字会使相机的反应速度变慢。 Binding Mode为Lock to Target时可用。
Heading:计算Follow朝向的方法 Definition:计算方法
Position Delta:基于当前帧和上一帧的目标位置之间的变化
Velocity:使用目标的刚体速度,如果目标没有Rigidbody组件,会使用Position Delta
Target Forward:使用目标的transform.forward作为heading的方向
World Forward:使用世界坐标系中的Vector3.forward作为heading方向
Bias:相机围绕旋转的偏移,单位是度数。
Recenter To Target Heading:接收不到用户输入时,自动居中。 Enable:是否启用 Wait Time:等待延迟时间,用户无输入后多长时间重新自动居中。 Recentering Time:重新自动居中的过程花费的时间
X Axis:通过玩家输入控制Heading方向。 Value:当前值 Value Range:输入范围 Speed:最大速度(Max Speed)或者最大增加速度(Input Value Gain) Accel Time:加速到最高速度所需要的时间 Decel Time:减速到0所需的时间 Input Axis Name:接收输入的Input Manager中的轴名称,空字符串代表不接收输入。 Input Axis Value:玩家输入的值。可以直接通过自定义脚本控制。 Invert:是否反转输入的值(取相反数)
这个算法可以让相机沿预定路径移动。使用Path Position属性来指定将虚拟相机放置在路径上的位置。

使用Auto-Dolly模式将虚拟相机移动到路径上最接近Follow目标的位置。启用后,Auto-Dolly会自动将虚拟相机的位置移动到最接近目标的路径上的位置。
提示:使用Auto-Dolly模式时,一定要谨慎选择路径形状。在围绕某个点形成弧形的路径上可能会有问题。举一个极端的例子,考虑一条以Follow目标为中心的完美圆形路径。路径上最接近目标的点变得不稳定,因为圆形路径上的所有点都同样接近目标。在这种情况下,将Follow目标移动很小的距离会导致相机在轨道上移动很大的距离。
属性详解 Path 相机移动的路径。此属性必须引用CinemachinePath或Cinemachine Smooth Path对象。 Path Position 沿路径放置相机的位置。直接给这个属性作动画或启用Auto-Dolly。这个值以Position Units指定的单位为单位。 Position Units 路径位置的度量单位。
Path Units 沿路径使用路径点。0表示路径上的第一个路径点,1表示第二个路径点,依此类推。
Distance 沿路径使用距离。根据路径的Resolution属性对路径进行采样。Cinemachine创建一个距离查找表,并将其存储在内部缓存中。
Normalized 使用路径的开头和结尾。值0表示路径的起点,值1表示路径的终点。 Path Offset 相机相对于路径的位置。X垂直于路径,Y向上,而Z平行于路径。使用此属性可使相机偏离路径本身。
X Damping 设置相机如何在垂直于路径的方向上保持其位置。较小的数字会使相机反应更快。较大的数字会使相机的响应速度变慢。每个轴使用不同的设置可以产生多种相机表现。 Y Damping 设置相机如何在路径局部坐标向上方向上保持其位置。较小的数字会使相机反应更快。较大的数字会使相机的响应速度变慢。 Z Damping 设置相机如何在平行于路径的方向上保持其位置。较小的数字会使相机反应更快。较大的数字会使相机的响应速度变慢。

Camera Up 如何为虚拟相机设置向上的方向。这会影响屏幕的组成,因为相机的Aim算法会尝试遵循向上方向。
Default 不修改虚拟相机的向上方向,而是使用Cinemachine Brain中的World Up Override属性。
Path 在当前点使用路径的向上方向。
Path No Roll 在当前点使用路径的向上方向,但Roll设置为零。
Follow Target 使用Follow目标的向上向量。
Follow Target No Roll 使用Follow目标的变换中的向上向量,但Roll为零。
Pitch Damping 相机如何跟踪目标旋转的x角。较小的数字会使相机反应更快。较大的数字会使相机的响应速度变慢。 Yaw Damping 相机如何跟踪目标旋转的y角。较小的数字会使相机反应更快。较大的数字会使相机的响应速度变慢。 Roll Damping 相机如何跟踪目标旋转的z角。较小的数字会使相机反应更快。较大的数字会使相机的响应速度变慢。
Auto Dolly 控制自动轨道位置选择方式。要使用此功能,必须设置Follow目标。
Enabled 选中以启用。注意:这可能会影响性能,具体取决于search resolution。
Position Offset 以position units为单位从路径上的最近点到跟随目标的偏移量。
Search Radius 当前段两侧的段数。如果只有一个路径使用0。当路径相对于目标位置的形状导致路径上最近的点变得不稳定时,请使用较小的数字。
Search Resolution Cinemachine通过将片段分成许多直片段来搜索片段。数字越高,结果越准确。但是,对于更大的数字,性能成比例地变慢。
这个算法将使用固定的相对位置将虚拟相机跟随目标,也可以使用Damping属性。

属性详解 Binding Mode绑定模式:从目标推断位置时使用的坐标空间。
Lock To Target On Assign:本地空间,相机被激活或target赋值时的相对位置。
Lock To Target With World Up:本地空间,保持相机y轴朝上,yaw和roll为0。
Lock To Target No Roll:本地空间,锁定到目标物体,roll为0。
Lock To Target:本地空间,锁定到目标物体
World Space:世界空间
Simple Follow With World Up:相对于目标的位置,使用相机的本地坐标系

Follow Offset:跟随目标时的位置偏移 X Damping:相机在X轴上移动的阻力系数。较小的值会使相机反应更快。较大的值会使相机的反应速度变慢。每个轴使用不同的设置可以制造出各种类型相机的行为。 绑定模式为Simple Follow With World Up时不可用。 Y Damping:相机在Y轴上移动的阻力系数。较小的值会使相机反应更快。较大的值会使相机的反应速度变慢。 Z Damping:相机在Z轴上移动的阻力系数。较小的值会使相机反应更快。较大的值会使相机的反应速度变慢。
【下面3个属性参考上面的飞机图】 Yaw Damping:相机在y轴旋转的阻力系数。较小的数字会使相机反应更快。较大的数字会使相机的反应速度变慢。每个轴使用不同的设置可以制造出各种类型相机的行为。Binding Mode为Lock to Target With World Up、Lock to Target No Roll、Lock to Target时可用。 Pitch Damping:相机在x轴旋转的阻力系数。较小的数字会使相机反应更快。较大的数字会使相机的反应速度变慢。 Binding Mode为Lock to Target No Roll、Lock to Target时可用。 Roll Damping:相机在z轴旋转的阻力系数。较小的数字会使相机反应更快。较大的数字会使相机的反应速度变慢。 Binding Mode为Lock to Target时可用。
【Cinemachine】VirtualCamera虚拟相机详解(一) 5分钟入门Cinemachine智能相机系统 Unity编辑器录屏神器:Unity Recorder 5分钟制作过场动画 【建议收藏】找不到免费的角色动画?来试试mixamo
【扩展学习】在洪流学堂公众号回复可以下载Timeline&Cinemachine系列教程全文带目录PDF哦
呼~ 今天小新絮絮叨叨的真是够够的了。没讲清楚的地方欢迎评论,咱们一起探索。
我是大智,你的技术探路者,下次见!
别走!点赞,收藏哦!
好,你可以走了。