本文将介绍一些使用Cinemachine开发小技巧,帮助你加速2D游戏的开发,了解更多关于Cinemachine Virtual Cameras和Confiners的信息以及其在2D游戏中的运用。

获取Cinemachine
如果你使用Unity 2018.1.0b7以上的版本,可以从Unity的资源包管理器Package Manager中获取Cinemachine。

点击菜单Window > Package Manager > All ,然后选择Cinemachine即可。

114139ukytk0jjjrj6rmo6.png

2、将玩家从层级窗口拖入Follow属性栏。
3、确保在LookAt属性栏的目标是空的,如果属性栏不是空的,选中并按下Backspace或Delete来移除引用。
4、根据需求调整Orthographic Size和Body设置。

在2D和3D不同环境虚拟相机之间,我们使用了Framing Transposer(构图转换器)。Framing Transposer会跟踪摄像机X-Y平面上的目标,阻止摄像机旋转。为了让Framing Transposer正常工作,我们需要确保虚拟摄像机的“LookAt”属性栏为空。

请注意:2D游戏使用Orthographic View(正交视图),在首次创建虚拟摄像机时,你需要修改场景中Cinemachine Brain Camera上的投影为Orthographic。

114139pfqqqbq8qjofojom.png

请记住重要的一点:使用Cinemachine,不要依赖一个摄像机来完成所有任务。正确的做法是在场景中放置多个虚拟摄像机,使用Cinemachine Brain将它们混合起来。

例如:当玩家血量过低,进入某个特定区域的时候,或是需要修改摄像机取景或后期处理效果的的场景。你可以根据想要的视觉效果调整Cinemachine Brain上的混合设置。

下面的视频将告诉你,如何在运行模式调整虚拟摄像机。
https://v.qq.com/x/page/u0727ejso3w.html

小技巧:你可以在运行模式下调整摄像机设置,当你在虚拟摄像机上勾选“Save During Play”时,调整后的内容即使是在运行模式下也会被保存下来。

限制摄像机
我们可以使用边界框把虚拟摄像机限制在特定区域中。此功能在虚拟摄像机的扩展菜单Extensions中找到。

下面是创建这个效果的步骤。

1、为关卡设置边界框。这将用来限制关卡。创建一个空游戏对象,并向其添加CompositeCollider2D,将CompositeCollider2D的Geometry Type设为Polygons;设置该对象上的Rigidbody为Static。向该对象添加BoxCollider2D,调整BoxCollider2D,使之适应关卡;把BoxCollider2D设为”Used by Composite”。

114139hea2juspsep3vuxj.gif

2、添加Confiner Extension到虚拟摄像机上。
3、拖拽我们创建好的边界框拖到Bounding Shape 2D Box属性栏上。
4、是否需要把摄像机限定为屏幕边界,可以通过“Confine Screen Edges”复选框调整。
5、最后,我们可以决定是否要让Confiner有减震效果。这会使摄像机与限制碰撞体的边界平滑地重叠。如果你不想要这个效果,设置Damping Time为0即可。

效果结果如下所示:
https://v.qq.com/x/page/t0727zj4m8x.html

小技巧:当使用”Confine Screen Edges”时,边界框要大于虚拟摄像机的正交尺寸。如果边界框小于屏幕,限制器在该区域不会正常工作。

示例视频:
https://v.qq.com/x/page/a0727ntwsx1.html

Group Camera
我们可以在2D中使用Cinemachine的另一个重要的功能是Group Camera。它允许我们为摄像机创建包含多个目标的群组 。

如果你想通过过场动画来展示重要内容,并在每个画面中保留多个对象,或者想要在2D中创建本地多人游戏时,Group Camera会非常实用。

在Cinemachine中,我们可以通过以下方式执行此操作:
1、新创建一个2D Virtual Camera。

114140g5x54xvfzl0v5ihv.gif

2、在场景中新创建建一个游戏对象。
3、点击菜单,选择Add Component > Cinemachine > Cinemachine Target Group。
4、向Target Group添加需要关注的游戏对象。
5、在检视窗口中,将目标群组拖入虚拟摄像机的”Follow Target”属性中。
6、调整Orthographic Size的最小值和最大值,用摄像机术语来说,这样可以定义摄像机的“焦距”。
7、确定Group Framing的类型。在摄像机构图时,”Horizontal”类型只考虑水平方向的范围,而”Vertical”则只考虑垂直方向的范围,“Horizontal and Vertical”会考虑以上二种范围。

Target Group是一个Cinemachine的组件,允许你在一个虚拟摄像机上查看多个目标。它会调整摄像机的尺寸,确保目标根据权重有相应的可见性。例如:如果所有目标的权重为1,目标群组会确保所有对象都可见。

下图是个关注玩家和箱子的Group Camera示例。

114148vll1tkkl5u5khe9u.gif

小技巧:在Group Virtual Camera被激活时,添加或移除群组对象,可以将对象的权重在一段时间内逐渐调整为0,或是从0逐渐调整到所需的权重。这样会使摄像机平滑地重新构图。

使用Impulse的摄像机抖动
我们在Cinemachine V2.2中,添加了一个新的Impulse Extension。此扩展允许用户不需要代码就可以创建摄像机抖动效果。Impulse Extension可以作为扩展添加到虚拟摄像机上。

下面介绍如何将它添加到场景中:
1、使用Cinemachine菜单选项创建2D Virtual Camera,设置它跟随我们的目标。
2、点击Add Extension > Cinemachine Impulse Listener。
3、在Impulse Listener上,勾选名为‘Use 2D Distance’的选项。
4、Channel Mask让你能对想的冲击进行分类。本示例中我们将使用默认通道。
5、选取冲击来源的游戏对象,本示例中我们使用一个弹球。每次它碰到地面时,它会在默认通道上广播一个冲击信号,Impulse Listener会到它。
6、点击Add Component,搜索‘Cinemachine Collision Impulse Source’。
7、在‘Signal Shape’标题下,我们将为Raw Signal变量选择一个信号。它是一个‘NoiseSettings’配置文件。我们可以使用默认配置文件,也可以创建自己的配置文件来使用。

点击齿轮图标,选择”New Noise Setting”,来新建”New Noise Setting”配置文件。将其保存在项目中。

我们可以选择让噪音影响Position和Rotation,也可以只影响二者之一。因为它是用在2D游戏上,我们会影响到X和Y的位置,以及Z轴的旋转。好的噪音配置文件得到的结果是不可预测的。有了噪音结果,只需要复制一些自然的随机数即可。我们可以通过带有不同细节的多个图层来实现。

8、我们也可以给应用噪音配置文件的频率和振幅添加一个增益。
9、在Spatial Range标题下,我们将调整Dissipation Distance,它会决定不再感知冲击的范围。目前我们将这个属性设为25。

我们还可以调整Dissipation Mode,从而修改衰减类型。我们还能调整的一些设置,你可以自行进行尝试。

效果如下图示:
114155u2hns1v6l87q2hq5.gif

小结
通过本文我们了解,通过资源包管理器获取Cinemachine,创建2D Virtual Camera。将虚拟摄像机限定在一个2D空间,使用虚拟摄像机的扩展,使之跟踪多个目标设置Impulse Module来添加摄像机抖动效果。

我们希望你能希望这篇文章,并且在2D中使用Cinemachine。更多Cinemachine最新资讯,尽在Unity官方中文论坛(UnityChina.cn) !
Cinemachine, 相机、摄像机锐亚教育

锐亚教育 锐亚科技 unity unity教程