美文网首页Unity探路营
【Cinemachine智能相机教程】VirtualCamera

【Cinemachine智能相机教程】VirtualCamera

作者: 洪智 | 来源:发表于2020-02-16 13:54 被阅读0次

    摘要:【长文预警,先收藏后品尝】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


    呼~ 今天小新絮絮叨叨的真是够够的了。没讲清楚的地方欢迎评论,咱们一起探索。

    我是大智,你的技术探路者,下次见!

    别走!点赞收藏哦!

    好,你可以走了。

    相关文章

      网友评论

        本文标题:【Cinemachine智能相机教程】VirtualCamera

        本文链接:https://www.haomeiwen.com/subject/nukpfhtx.html