Unity | Cinemachine Virtual Camera

基于Unity2018.2.15,Cinemachine插件的导入需要从菜单栏”Window”->”Package Manager”中进行下载并导入。导入完成之后,在菜单栏会新增加一项”Cinemachine”。

  • Virtual Camera普通虚拟相机

创建Virtual Camera后,会发现MainCamera主摄像机上挂了Cinemachine Brain组件

【Cinemachine Brain组件】:

场景中可以存在多个虚拟摄像机,Cinemachine Brain用于管理所有的虚拟摄像机。这个组件就是将当前的虚拟摄像机拿给真实存在的MainCamera主摄像机来渲染。所以虚拟摄像机不耗费性能,因为真实的相机只有一个。当存在虚拟相机时,MainCamera主摄像机会被锁死,要修改MainCamera主摄像机的位置,需要修改当前虚拟摄像机的位置。

  1. Live Camera:代表当前的虚拟摄像机。当有多个虚拟摄像机时,Cinemachine Brain组件的Live Camera设置总是最新创建的层级窗口靠下面的虚拟摄像机;
  2. Live Blend:当前的镜头转换名称。
  3. ShowDebugText:在Game窗口左上角显示当前虚拟相机的名称。
  4. Show Camera Frustum:展示摄像机的视锥体,显示摄像机可以看到场景的部分。
  5. Ignore Time Scale:虚拟相机实时响应,忽略Time Scale的影响。
  6. World Up Override:重载世界的向上方向(Y轴),虚拟相机是通过这个来判断世界环境。为Null时,使用世界的Y轴。
  7. Update Method:选择何时更新相机的位置和方向。固定更新( Fixed Update )、后期更新模式( LateUpdate )或以二者的组合进行摄像机的平滑处理。
  8. Default Blend:设置多虚拟相机时的混合使用及过渡时间;默认情况下,使用“缓入 ( EaseInout ) ”曲线形状进行两秒钟的混合。
  9. CustomBlends:自定义混合,并存储在 Cinemachine Blend Settings 文件中。单击create Asset以创建一个设置文件,用于存储自定义混合。
  10. Camera Cut Event:相机立即切换时事件。
  11. Camera Activated Event:相机切换时第一帧事件。

虚拟摄像机身上有个组件,叫Cinemachine Virtual Camera。

【Cinemachine Virtual Camera】

  1. status:用于调试,有三种状态:Live:正在使用;Standby:准备状态;Disable:不能用。按Solo按钮会让相机切换到当前选中的这个虚拟相机。
  2. Game Window Guides:当【Follow不为null并且对应的Body为Framing Transposer】或者【Look At不为null并且对应的Aim为Composer/Group Composer】时,勾选Game Window Guides后,Game窗口会显示辅助线,用于设置虚拟相机的各个属性。
  3. Save During Play:虚拟相机的属性在运行时的修改可以被保存下来,退出Play状态时不会被重置。
  4. Priority优先级:虚拟相机的重要程度,用于Cinemachine Brain组件Live Camera的选择。数值越高代表优先级越高。
  5. Follow跟随目标:虚拟相机会跟随这个物体移动,Body属性基于这个目标物体更新Unity相机的位置。
  6. Look At瞄准:镜头瞄准的物体目标。Aim属性使用这个属性来更新Unity相机的旋转。
  7. Standby Update:准备状态时的更新方式。Never:不更新;Always:每帧更新;Round Robin:循环更新,所有处于准备状态的虚拟相机循环更新,每帧更新一个相机。当虚拟相机物体没有被禁用,但是优先级不足时,虚拟相机处于准备状态。这个属性会影响性能,通常设置为Never是最好的,但是有时候可能需要虚拟相机更新来做一些镜头相关的计算判断。
  8. Lens:Field Of View、Near Clip Plane、Far Clip Plane这三个参数是设置相机的视野大小及范围;Dutch:控制镜头的旋转。
  9. Transitions:虚拟相机的切换效果。
    ☆ Blend hint:
       【 None:无,默认线性混合;
           Spherical Position:根据Look At的物体球面旋转混合;
           Cylindrical Position:根据Look At的物体柱面旋转混合(水平方向圆弧,垂直方向线性);
           creen Space Aim When Target:在屏幕空间瞄准目标;】
    ☆ Inherit Positon:下一个相机变成活动相机时,从上一个相机继承位置,即保持两个相机位置相同。
  10. On Camera Live事件:相机变为活动时会触发对应的事件。
  11. Body:用于设置相机跟随物体移动的效果。

    -【DoNothing】:相机不跟随目标移动,通常和Look At配合使用,模拟固定位置的跟随镜头。当Look At不为null并且对应的Aim为Composer时的效果如下:

    -【Framing Transposer】:跟随目标移动,并在屏幕空间保持相机和跟随目标的相对位置,效果如下图。

    – Center On Active:选中时,虚拟相机激活时会将镜头中心对准物体。不选中时,虚拟相机会将目标物体放置在最近的Dead Zone边缘。

    – 当Follow设置的不是一个物体,而是一组物体,即Target Group时,Body列表和Aim列表会新增加几个参数。
    – 创建一个Target Group:菜单栏选择Cinemachine > Create Target Group Camera。Unity会在场景中添加一个虚拟相机和Target Group。Follow和Look At属性会自动设置为这个Group。

     

    -【Hard Lock to Target】:虚拟相机和跟随目标使用相同位置。

    -【Orbital Transposer】:相机和跟随目标的相对位置是可变的,还能接收用户的输入。常见于玩家控制的相机。

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

      – Yaw Damping:相机在y轴旋转的阻力系数。
      – Pitch Damping:相机在x轴旋转的阻力系数。
      – Roll Damping:相机在z轴旋转的阻力系数。
      
      – 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】:相机沿着预先设置的轨道移动。

      – 创建轨道:新建一个空物体,添加CinemachineSmoothPath组件,添加Waypoints。将该组件赋值给Body的Path属性。
      – Roll:翻转,类似于过山车轨道效果。

     

      – 勾选Auto Dolly-Enabled,摄像机会沿着轨道移动,效果如下:
     

    -【Transposer】:跟随目标移动,并在世界空间保持相机和跟随目标的相对位置固定。

  12. Aim:设置相机旋转的效果。

    【Do Nothing】: 不控制相机的旋转。

    【Composer】: 保持目标物体在镜头内。

    【Group Composer】: 保持多个目标在镜头内。

      – Group Framing Size:目标应占据的屏幕大小比例。使用1填充整个屏幕,使用0.5填充一半的屏幕,依此类推。

      – Framing Mode:指定构图时要考虑的屏幕尺寸。
          – Horizontal 仅考虑水平尺寸。忽略垂直尺寸。
          – Vertical 仅考虑垂直尺寸。忽略水平尺寸。
          – Horizontal And Vertical 使用水平和垂直尺寸中较大的那个来获得最佳匹配。

      – Adjustment Mode 如何调整相机以获得所需的取景。可以是缩放、拉近拉远或同时进行。
          – Zoom Only 不移动相机,仅调整FOV。
          – Dolly Only 移动相机,不修改FOV。
          – Dolly Then Zoom 将相机移动到范围允许的最大范围,然后根据需要调整FOV。

      – Max Dolly In:朝目标拉近相机的最大距离。
      – Max Dolly Out:远离目标拉远相机的最大距离。
      – Minimum Distance: 设置此项以限制相机可以接近目标的最小距离。
      – Maximum Distance:设置此项以限制相机可以达到的最远目标距离。
      – Minimum FOV:自动调节FOV时的最小值。
      – Maximum FOV:自动调节FOV时的最大值。

    【Hard Look At】: 保持目标在镜头的中心。

    【POV】: 基于玩家的输入旋转相机。

      – Vertical Axis:控制虚拟相机目标的垂直朝向。

      – Vertical Recentering:当接收不到玩家输入时,自动在垂直方向重新居中。

      – Horizontal Axis:控制水平方向。

      – Horizontal Recentering:当接收不到玩家输入时,自动在水平方向重新居中。

    【Same As Follow Target】: 相机的旋转和目标的旋转保持同步。

  13. Noise:模拟现实世界手持拍摄的晃动效果。
    没有设置Noise及设置Noise,Noise Profile为6D Shake的效果如下:

      

 


版权声明:本文为weixin_39766005原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。