查看原文
其他

Cinemachine在2D游戏中的开发小技巧

Unity Unity官方平台 2018-11-15

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

获取Cinemachine

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

 

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


从资源包管理器中获取

为2D创建摄像机

使用Cinemachine,为2D环境创建摄像机系统的过程很简单。下面介绍如何为2D场景创建虚拟摄像机(Virtual Camera)。

  • 点击菜单,选择Cinemachine > Create 2D Camera,创建2D虚拟摄像机。这将会为2D环境创建一个虚拟摄像机。如果这是场景中的首个虚拟摄像机,它还会添加一个Cinemachine Brain组件到主摄像机上。



  • 将玩家从层级窗口拖入Follow属性栏。

  • 确保在LookAt属性栏的目标是空的,如果属性栏不是空的,选中并按下Backspace或Delete来移除引用。

  • 根据需求调整Orthographic Size和Body设置。


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


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



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


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


下面的视频将告诉你,如何在运行模式调整虚拟摄像机。


https://v.qq.com/txp/iframe/player.html?vid=u0727ejso3w&width=500&height=375&auto=0

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


限制摄像机

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

 

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

  • 为关卡设置边界框。这将用来限制关卡。

    创建一个空游戏对象,并向其添加CompositeCollider2D,将CompositeCollider2D的Geometry Type设为Polygons;设置该对象上的Rigidbody为Static。


    向该对象添加BoxCollider2D,调整BoxCollider2D,使之适应关卡;把BoxCollider2D设为”Used by Composite”。

     

 

  • 添加Confiner Extension到虚拟摄像机上。

  • 拖拽我们创建好的边界框拖到Bounding Shape 2D Box属性栏上。

  • 是否需要把摄像机限定为屏幕边界,可以通过“Confine Screen Edges”复选框调整。

  • 最后,我们可以决定是否要让Confiner有减震效果。这会使摄像机与限制碰撞体的边界平滑地重叠。如果你不想要这个效果,设置Damping Time为0即可。


效果结果如下所示:


https://v.qq.com/txp/iframe/player.html?vid=t0727zj4m8x&width=500&height=375&auto=0

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


示例视频:


https://v.qq.com/txp/iframe/player.html?vid=a0727ntwsx1&width=500&height=375&auto=0

Group Camera

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


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


在Cinemachine中,我们可以通过以下方式执行此操作:

  • 新创建一个2D Virtual Camera。



  • 在场景中新创建建一个游戏对象。     

  • 点击菜单,选择Add Component > Cinemachine > Cinemachine Target Group。

  • 向Target Group添加需要关注的游戏对象。

  • 在检视窗口中,将目标群组拖入虚拟摄像机的”Follow Target”属性中。

  • 调整Orthographic Size的最小值和最大值,用摄像机术语来说,这样可以定义摄像机的“焦距”。

  • 确定Group Framing的类型。在摄像机构图时,”Horizontal”类型只考虑水平方向的范围,而”Vertical”则只考虑垂直方向的范围,“Horizontal and Vertical”会考虑以上二种范围。


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

 

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



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


使用Impulse的摄像机抖动

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

 

下面介绍如何将它添加到场景中:

  • 使用Cinemachine菜单选项创建2D Virtual Camera,设置它跟随我们的目标。

  • 点击Add Extension > Cinemachine Impulse Listener。

  • 在Impulse Listener上,勾选名为‘Use 2D Distance’的选项。

  • Channel Mask让你能对想监听的冲击进行分类。本示例中我们将使用默认通道。

  • 选取冲击来源的游戏对象,本示例中我们使用一个弹球。每次它碰到地面时,它会在默认通道上广播一个冲击信号,Impulse Listener会监听到它。

  • 点击Add Component,搜索‘Cinemachine Collision Impulse Source’。

  • 在‘Signal Shape’标题下,我们将为Raw Signal变量选择一个信号。它是一个‘NoiseSettings’配置文件。我们可以使用默认配置文件,也可以创建自己的配置文件来使用。


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


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


  • 我们也可以给应用噪音配置文件的频率和振幅添加一个增益。

  • 在Spatial Range标题下,我们将调整Dissipation Distance,它会决定不再感知冲击的范围。目前我们将这个属性设为25。

 

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


效果如下图示:


小结

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

 

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

 

推荐阅读


官方活动

直播课程预约 | 深入了解PiXYZ Plugin

7月25日晚8点,新一期的Unity官方技术直播课程,Unity工业解决方案工程师任沁明会为您详细介绍PiXYZ Plugin的各种功能,以及如何在发布出的应用程序中集成这一服务。[了解详情]

适众人群:对Unity在工业领域运用感兴趣的用户

直播地址:https://connect.unity.com/events/unitychina-pixyz2


实时优化,智造收益 - Unity Monetization开发者生态沙龙

8月3日,Unity将于举办为期半天的Unity Monetization开发者生态沙龙!本次活动将与大家共同探讨移动游戏开发与变现相关难点与痛点。[了解详情]

报名地址:

https://connect.unity.com/events/unityads


7月Asset Store资源商店促销 

7月,只需在Asset Store资源商店消费满30-199美元,最高可获得价值235美元的5款免费资源,参与活动,获得夏日精选资源包。

活动地址:

https://assetstore.unity.com/g/july-promo-activation-cn



点击“阅读原文”访问Unity官方中文论坛

    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存