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 最基本的相机,
Cinemacine Virtual Camera

变量名说明
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 相机视野
FreeLook 相机是一个自由相机,类似于第三人称游戏中的相机,可以使用鼠标控制相机的朝向多方向的观察角色;其相机视野像是一个圆柱体,如上图所示。(相机始终会在这个圆柱体的轨道上运动。)
FreeLook
大多数参数与 Virtual Camera 相似,值得注意的是:
在 FreeLook 相机中需要绑定 顶部,中间,底部三个位置,这三个位置将决定相机的最大视野。

# BlendList

如名字一样他管理的是一个 camera 列表,并将列表内的 camera 做混合到达射线机之间更自然的切换效果。
我们可以控制摄像机切换的 缓动函数
值得注意的是:当 BlendList 启用时,其下的摄像机会依次使用最后停留在最后一个摄像机里。

# CinemachineStateDrivenCamera

这是被动画状态所驱动的虚拟相机管理器,能够在觉得切换动画时,快速的切换该动画应该使用的相机。【注意设置层级和绑定动画控制器】
CinemachineStateDrivenCamera

# ClearShoot

ClearShoot 也是一个管理器,负责管理一组 camera,他的效果是时刻选择最优的摄像机。在复杂的场景中,我们的角色可能被环境所遮挡,我们需要多个摄像机来处理这种情况。
如下图所示,我设置了 2 个摄像机,一个在顶部,一个在后方,在角色移动到墙壁后面时,后方的摄像机被遮挡,此时会自动启动顶部摄像机。在角色回到墙壁后面时,顶部摄像机被遮挡,只能切换到后面的摄像机。
ClearShoot

# TargetGroup

TargetGroup
目标组管理器,可以让位于目标组管理器中的目标 尽可能 的位于屏幕中。
在使用目标组管理器时,务必为摄像机设置目标组类型:

# Mixing

Mixing 摄像机混合管理器,可以将多个摄像机的信息进行混合按照权重,得到最终的显示画面。
(通过多相机的焦点处建立坐标系按权重分配偏移)
Mixing

# 活区和死区

活区和死区

  • A 区域为死区(Dead Zone),对象在死区内任意移动 不会改变 摄像机的位置。
  • B 区域为活区(Soft Zone),对象在活区时会触发摄像机 缓动 ,最终将对象固定在死区。
  • C 区域为界外区,对象在界外区活动时,摄像机会 立即 改变位置时,使对象位于活区。

本文参考

[1] Unity Cinemachine 插件学习笔记
[2] 个人笔记】Unity 插件 “Cinemachine”—— 实现尼尔机械纪元运镜设计

# Dolly 轨道

我们可以创建一个自定义的轨道,将摄像机限制在该轨道上。

如图所示我创建了一个圆形轨道,摄像机只能在轨道上运动。

# Dolly with Cart 轨道

让物体沿着轨道运动
Dolly with Cart轨道(这是一个很强大的功能,其实我们不止能用在摄像机上,可以用在任何游戏对象上,让这个对象,或 ui 只能沿着这个轨道运动,并实时设置要达到哪个点,简言之这是一个曲线编辑器。)

# 总结

Cinemachine 是一款非常棒的智能摄像机插件,非常的方便易用。解决大部分的摄像机问题,甚至无需编写代码。当然我们也可以使用代码来控制摄像机,更灵活的处理摄像机与角色之间的关系。

更新于 阅读次数

请我喝[茶]~( ̄▽ ̄)~*

Fasty 微信支付

微信支付

Fasty 支付宝

支付宝

Fasty 贝宝

贝宝