The Cinemachine Brain is a component in the Unity Camera itself. Cinemachine Brain monitors all active Virtual Cameras in the Scene. To specify the next live Virtual Camera, you activate or deactivate the desired Virtual Camera's game object. Cinemachine Brain then chooses the most recently activated Virtual Camera with the same or higher priority as the live Virtual Camera. It performs a cut or blend between the previous and new Virtual Cameras.
Cinemachine Brain 是挂载在真实相机上面的。它(根据逻辑)在多个 Virtual Camera 之间切换,并处理过渡,控制真实相机的表现。
存储的Blend资源中,存储的都是相机的名字:
m_CustomBlends: - m_From: CM FreeLook1 m_To: Timeline m_Blend: m_Style: 1 m_Time: 2.5 m_CustomCurve: serializedVersion: 2 m_Curve: ...
Cinemachine does not create new cameras. Instead, it directs a single Unity camera for multiple shots. You compose these shots with Virtual Cameras. Virtual Cameras move and rotate the Unity camera and control its settings.
Cinemachine不会创建新相机,而是通过创建 Virtual Camera 控制原来的相机。
The Virtual Cameras are separate GameObjects from the Unity Camera, and behave independently.
Virtual Cameras 都是单独的Game Object。
Cinemachine encourages you to create many Virtual Cameras. The Virtual Camera is designed to consume little processing power. If your Scene is performance-sensitive, deactivate all but the essential Virtual Cameras at any given moment for extreme performance.
Virtual Camera 的消耗很小,可以放心使用,创建多个也没关系。如果对性能很敏感,就及时关掉不用的 Virtual Camera。
Virtual Camera是Cinemachine拓展功能的基础,各种不同功能的相机都是继承自Virtual Camera。基础的Virtual Camera就像Unity中原生的Camera,可以调整Fov、Near Far Clip等参数,初次之外还增加了Follow和Lookat等关联目标(原生相机没有的),相机的Body和Aim状态(也就是位移和朝向)也有多种自带的控制方案,可能需要绑定上述的Follow和Lookat目标,把这两个功能关掉就很像原生的Camera了。Solo是在场景中临时切换到这个相机看效果
Live是正在生效的状态,Standby是没有生效的状态,Standby Update就是不生效的时候的更新方式
通过3个圆环描述相机轨迹,相机可以由玩家的输入控制
BlendList对象下面会有N个Virtual Camera,BlendList的属性中可以填写一个相机依次切换的队列,当这个BlendList被激活时,就会按照这个队列进行相机的依次切换。可以控制每个相机阶段停留的时长和过渡时长,但是不能控制相机运动的具体路径
和BlendList类似,也是1个StateDriven下面会挂载N个Virtual Camera,由一个Animator(上面所挂载的Animator Controller)所处的状态确定激活哪一个相机
A manager camera oversees many Virtual Cameras but acts as a single Virtual Camera from the point of view of Cinemachine Brain and Timeline.
Manager Camera 管理多个 Virtual Camera,但是可以像处理单个 Virtual Camera 一样进行使用。Manager Camera 为我们提供了更多功能。
也是看向一个目标,但是有一定的宽容度,使用Dead Zone和Soft Zone来描述这个宽容程度,Damping描述回到可容忍位置的速度(Damping,阻尼)。进入Solo状态时两个Zone的范围才能看得比较清楚
直接朝向
CinemachinePath(实际用起来感觉不太完善,还是得自己实现曲线插值)
每个Virtual Camera都有一个Priority属性,描述其优先级,优先级最高的相机就是生效的相机。对于优先级相同的相机,后创建出来(或者后启用)的生效,但是不保证一定是这样(待验证)。可以通过在编辑器中关闭再开启一个相机将其切换为Live状态,代码可以参考:
public void LiveVirtualCamera(enumVirtualCamera liveTarget) { // Avoid Camera Shake if (liveTarget == m_LivingVirtualCamera) return; m_LivingVirtualCamera = liveTarget; // Pop & Push System.Action<GameObject> PopPushOfQueue = Go => { Go.SetActive(false); Go.SetActive(true); }; switch(liveTarget) { case enumVirtualCamera.VC_LUA: PopPushOfQueue(m_Lua.gameObject); break; case enumVirtualCamera.VC_LOCK: PopPushOfQueue(m_Lock.gameObject); break; case enumVirtualCamera.VC_STATIC: PopPushOfQueue(m_Static.gameObject); break; case enumVirtualCamera.VC_DYNAMIC: PopPushOfQueue(m_Dynamic.gameObject); break; case enumVirtualCamera.VC_OVERLOOK: PopPushOfQueue(m_Overlook.gameObject); break; case enumVirtualCamera.VC_DEBUG: PopPushOfQueue(m_Debug.gameObject); break; default: break; } }
相机之间的Blend效果可控制的内容有限,基本都是插值过去,只能用曲线描述一下快慢。要想控制路径的话,还是要用其他的方法单独做。
Virtual Camera 之间的切换混合只在 Play Mode 生效,在 Edit Mode 里面是 Hard Cut。
关于World Up方向:
因为很多相机动画的过渡,都是 Cinemachine 直接提供的,所以 Up 方向是很重要的,会影响到相机的运动方式。比如在俯视角情况下(摄像机和玩家角色的朝向有很大的偏差角度),应该需要修改 Up 方向,才能让相机的运动更加自然。一般情况下使用默认的Up(0,1,0)就足够了。