摘要:【长文预警,先收藏后品尝】Cinemachine中的虚拟相机如何跟随目标物体呢?这就需要搞明白Body属性的设置咯。
你好,我是跟着大智学Unity的萌新,我叫小新,这是我本周的学习总结报告哦。
自从咱们一起5分钟入门Cinemachine之后,上周我和你一起学习了Cinemachine中的VirtualCamera的基本用法,今天咱们来学习一下它的Body属性。
【长文预警,先收藏后品尝】Cinemachine中的虚拟相机如何跟随目标物体呢?这就需要搞明白Body属性的设置咯。
Body属性
CinemachineVitualCamera组件中的Body属性用于设置相机移动时使用什么算法。需要先设置好上面的Follow属性。
Cinemachine包含以下移动相机的算法:
- Do Nothing:不移动虚拟相机
- Framing Transposer:跟随目标移动,并在屏幕空间保持相机和跟随目标的相对位置。
- Hard Lock to Target:虚拟相机和跟随目标使用相同位置。
- Orbital Transposer:相机和跟随目标的相对位置是可变的,还能接收用户的输入。常见于玩家控制的相机。
- Tracked Dolly:相机沿着预先设置的轨道移动。
- Transposer:跟随目标移动,并在世界空间保持相机和跟随目标的相对位置固定。
Do Nothing算法
选中这个算法时,虚拟相机激活时,会控制Unity相机会固定在当前虚拟相机的位置,不会移动。用于固定位置的镜头,也可以通过自定义脚本来控制相机的位置。通常和Look At配合使用,模拟固定位置的跟随镜头。
Framing Transposer算法
选中这个算法时,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组件
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 每个物体的半径,用于计算包围盒。不可为负数。
Hard Lock To Target算法
Unity相机保持和目标位置一致,即位置同步。
Damping:相机追赶上目标位置的时间。如果为0,那就是保持同步,如果大于0,相当于经过多少秒相机和目标位置重合。
Orbital Transposer算法
这个算法支持相机和目标之间的可变相对位置关系。可以接受玩家的输入,动态的控制相机的位置。
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:是否反转输入的值(取相反数)
Tracked Dolly
这个算法可以让相机沿预定路径移动。使用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通过将片段分成许多直片段来搜索片段。数字越高,结果越准确。但是,对于更大的数字,性能成比例地变慢。
Transposer
这个算法将使用固定的相对位置将虚拟相机跟随目标,也可以使用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
可以下载Timeline&Cinemachine系列教程全文带目录PDF哦
呼~ 今天小新絮絮叨叨的真是够够的了。没讲清楚的地方欢迎评论,咱们一起探索。
我是大智,你的技术探路者,下次见!
别走!点赞,收藏哦!
好,你可以走了。
网友评论