Unity 版本:2019.3.6f1
长文警告!!!
是否为摄像机脚本困扰?是否为镜头动画烦恼? Cinemachine 超强插件解决你的问题!
安装Cinemachine
现在 Cinemachine 作者已经投靠 unity 官方了,所以 Cinemachine 也成为了 Unity 的官方插件,我们可以直接在 PackageManager 中下载:
各类相机简述
安装之后我们可以在顶部菜单栏,看到如下的选项:
选项 | 说明 |
---|---|
Virtual Camera | 虚拟摄像机 |
FreeLook Camera | 自由相机,可以保证镜头内出现头和身体,及相机的活动范围在目标周围圆柱(曲面的)表面,一般用于第三人称控制器 |
State-driven Camera | 状态驱动相机。添加虚拟相机列表,可以在不同的相机直接直接实现平滑切换,同时其子相机列表如果没有设置LookAt对象等,会直接使用这个父相机的对象。 |
ClearShot Camera | 干净镜头相机。类似上一个相机,区别在于这个相机可以通过判断子相机的CinemachineCollider(如果有),看是否相机被场景物体阻碍,切换相机。具体可看其源码注释。 |
Dolly Camera with Track | 可推拉的轨道相机。通过结合轨道路径,就可以模拟像拍电影般镜头轨道移动。 |
Group Target Camera | 多目标相机。可以同时设置多个目标。 |
Cinemachine Brain
在我们创建任意虚拟相机后,插件会为我们的摄像机添加此组件,此组件是我们虚拟相机的大脑,控制着真实相机的行为。(不可或缺)
变量名 | 说明 |
---|---|
Live Camera | 当前选择的虚拟相机。 |
Live Blend | 当前的镜头转换名称。 |
Show Debug Text | 在游戏画面左上角显示调试信息。 |
Show Camera Frustum | 显示相机的视锥体,相比原来自带的边框,这个会裁切掉不在显示范围内的边线。 |
World Up Override | 重载世界的向上方向(y轴),虚拟相机是通过这个来判断世界环境。 |
Default Blend | 默认相机切换模式。 |
Custom Blends | 自定义相机切换模式。 |
Camera Cut Event | 相机立即切换时事件。 |
Camera Activated Event | 相机混合(就是有切换变化,不是Cut时)切换时第一帧事件。 |
# Virtual Camera
Cinemacine Virtual Camera 是 Cinemachine 最基本的相机,
变量名 | 说明 |
---|---|
Status | 状态,Live 为正在使用,Standby 为准备使用(没在用,但如果上一级停用了,可能会切换到当前虚拟相机),Disable 为不能用。按 Solo 按钮会让相机切换到这个虚拟相机(包括 Disable)。 |
Game Window Guides | 是否在 game 窗口显示辅助 |
Save During Play | 保存游戏中的改变 |
priority | 虚拟相机的优先级,如果同时有多个虚拟相机,使用优先级最高的。如果多个同等级的,应该是按 Hierarchy 顺序找到第一个虚拟相机。 |
Lens | 镜头常用配置。视角区域,最近最远裁切平面, 镜头旋转角度。 |
Body | 相机本身。四种:Hard constraint,固定距离,相当于第一人称。 Orbital Transposer:轨迹转换器?似乎是模拟第三人称。 Tracked Dolly,轨道推拉,相机只能在轨道上移动(即使设置了 Follow 对象),需要轨道路径 CinemachinePath。 Transposer,普通的镜头转换。 |
Aim | 瞄准设置,有三种:Hard constraint,固定距离,没有任何平滑效果。Composer,有平滑效果的瞄准目标。Group Composer,同时瞄准多个目标。 |
Noise | 噪音,用于相机抖动,预设有多种效果,也可以自己建立新效果。 |
Extension | 扩展,可以添加诸如相机碰撞器,相机变焦器等 |
# TimeLine
在 TimeLine 中实现 2 个镜头间的切换非常容易。
# FreeLook
FreeLook 相机是一个自由相机,类似于第三人称游戏中的相机,可以使用鼠标控制相机的朝向多方向的观察角色;其相机视野像是一个圆柱体,如上图所示。(相机始终会在这个圆柱体的轨道上运动。)
大多数参数与 Virtual Camera 相似,值得注意的是:
在 FreeLook 相机中需要绑定 顶部,中间,底部三个位置,这三个位置将决定相机的最大视野。
# BlendList
如名字一样他管理的是一个 camera 列表,并将列表内的 camera 做混合到达射线机之间更自然的切换效果。
我们可以控制摄像机切换的 缓动函数。
值得注意的是:当 BlendList 启用时,其下的摄像机会依次使用最后停留在最后一个摄像机里。
# CinemachineStateDrivenCamera
这是被动画状态所驱动的虚拟相机管理器,能够在觉得切换动画时,快速的切换该动画应该使用的相机。【注意设置层级和绑定动画控制器】
# ClearShoot
ClearShoot 也是一个管理器,负责管理一组 camera,他的效果是时刻选择最优的摄像机。在复杂的场景中,我们的角色可能被环境所遮挡,我们需要多个摄像机来处理这种情况。
如下图所示,我设置了 2 个摄像机,一个在顶部,一个在后方,在角色移动到墙壁后面时,后方的摄像机被遮挡,此时会自动启动顶部摄像机。在角色回到墙壁后面时,顶部摄像机被遮挡,只能切换到后面的摄像机。
# TargetGroup
目标组管理器,可以让位于目标组管理器中的目标 尽可能
的位于屏幕中。
在使用目标组管理器时,务必为摄像机设置目标组类型:
# Mixing
Mixing 摄像机混合管理器,可以将多个摄像机的信息进行混合按照权重,得到最终的显示画面。
(通过多相机的焦点处建立坐标系按权重分配偏移)
# 活区和死区
- A 区域为死区(Dead Zone),对象在死区内任意移动
不会改变
摄像机的位置。 - B 区域为活区(Soft Zone),对象在活区时会触发摄像机
缓动
,最终将对象固定在死区。 - C 区域为界外区,对象在界外区活动时,摄像机会
立即
改变位置时,使对象位于活区。
本文参考
[1] Unity Cinemachine 插件学习笔记
[2] 个人笔记】Unity 插件 “Cinemachine”—— 实现尼尔机械纪元运镜设计
# Dolly 轨道
我们可以创建一个自定义的轨道,将摄像机限制在该轨道上。
如图所示我创建了一个圆形轨道,摄像机只能在轨道上运动。
# Dolly with Cart 轨道
让物体沿着轨道运动
(这是一个很强大的功能,其实我们不止能用在摄像机上,可以用在任何游戏对象上,让这个对象,或 ui 只能沿着这个轨道运动,并实时设置要达到哪个点,简言之这是一个曲线编辑器。)
# 总结
Cinemachine 是一款非常棒的智能摄像机插件,非常的方便易用。解决大部分的摄像机问题,甚至无需编写代码。当然我们也可以使用代码来控制摄像机,更灵活的处理摄像机与角色之间的关系。