kingBook

导航

Cinemachine Brain

Unity Cinemachine 初识: https://zhuanlan.zhihu.com/p/103584975
https://blog.csdn.net/wangjiangrong/article/details/108726387
https://docs.unity3d.com/Packages/com.unity.cinemachine@2.8/manual/CinemachineUsing.html

Cinemachine Brain

  • Show Debug Text: 开启后会在Game视图中显示当前Live状态下的VirtualCamera的文本信息,如图:
    image
  • Show Camera Frustum: 开启后在Scene视图中会始终显示Camera的视锥体(Scene视图需启用Gizmos)。
  • Ignore Time Scale: 使VirtualCamera响应用户的输入和阻尼时忽视TimeScale的设置。
  • World Up Override: 指定VirtualCamera在世界空间中向上的向量,若为空,则为世界空间中Y轴的方向
  • Update Method: VirtualCamera更新位置和旋转的方式。
选项 说明
Fixed Update VirtualCamera的更新与物理模块同步
Late Update 在MonoBehaviour的LateUpdate中更新
Smart Update 每个VirtualCamera根据其目标的更新方式来更新,推荐使用
Manual Update VirtualCamera不会自动更新,必须我们手动的调用ManualUpdate()来更新(应该在Camera跟随或看向的目标移动后调用)
  • Blend Update Method: 主摄像机混合和更新的时机
选项 说明
Fixed Update 仅在Update Method使用的是Fixed Update并且在混合时发现剧烈震动时使用
Late Update 在MonoBehaviour的LateUpdate中出来,推荐使用
  • Default Blend: 用于设置两个VirtualCamera混合的方式,除Cut外,其它方式可在后面设置一个混合的持续时间
选项 说明
Cut 瞬切,立马显示下个VirtualCamera的画面
Ease In Out S型曲线,混合开始和结束时比较平滑(慢->匀速->慢)
Ease In 混合结束时比较平滑(匀速->慢)
Ease Out 混合开始时比较平滑,然后匀速到结束(慢->匀速)
Hard In 混合开始时很很慢(从超级慢开始加速)
Hard Out 混合结束时很很慢(从较快速度减速到超级慢)
Linear 匀速移动
Custom 自定义混合曲线
  • Custom Blends:

    • 在前面的设置中,设置的是所有的VirtualCamera的混合方式,但是假如当我们的场景中有多个VirtualCamera,并且不同的VirtualCamera之间的混合方式不尽相同的时候,就需要通过该属性来设置不同VirtualCamera之间的混合方式了。会生成一个Asset用来存储数据,具体设置如下。
      image

    • 需要注意的是,在From和To中设置的是VirtualCamera的名称,也就是一个字符串,而非是VirtualCamera的引用。我们可以通过设置内置的ANY CAMERA来代表任何一个VirtualCamera。

    • 当要执行Blend操作时,首先会从Custom Blends中查找匹配项,若没有,则使用Default Blend的设置。若有多条匹配项,则优先选择最符合要求的。(例如vc1混合到vc2,一项是From:vc1,To:vc2,一项是From:vc1,To:ANY CAMERA,那么前面那项是更符合要求的,会被使用)若有多条最符合要求的,则选择最先找到的那一条

  • Events:

    • Camera Cut Event: 当一个VirtualCamera变为Live状态,并且其混合方式为Cut的情况下触发
brain.m_CameraCutEvent.AddListener(CameraCutEvent);
void CameraCutEvent(CinemachineBrain brain){
    Debug.Log(brain);
}
  • Camera Activated Event: 当一个VirtualCamera变为Live状态时触发,若带有混合,则触发在混合开始的第一帧。
brain.m_CameraActivatedEvent.AddListener(CameraActivatedEvent);
//第一个参数为新的Live状态的VirtualCamera,第二个参数为上一个Live状态的VirtualCamera
void CameraActivatedEvent(ICinemachineCamera liveCamera, ICinemachineCamera lastCamera){
    Debug.Log(liveCamera);
    Debug.Log(lastCamera);
}

posted on 2021-11-26 10:48  kingBook  阅读(517)  评论(0编辑  收藏  举报