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的文本信息,如图:
- 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用来存储数据,具体设置如下。
-
需要注意的是,在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);
}