欢迎光临散文网 会员登陆 & 注册

Unity学习笔记 Vol.74 使用Unity中的Cinemachine创建第三人称摄像机

2020-10-08 21:24 作者:NXL2  | 我要投稿

摘要

    Cinemachine是Unity中一款出色的工具,它可以提供一系列功能,帮助你为游戏和动画设置功能性的摄像机,并且可以用于2D和3D内容。Cinemachine可以确保摄像机能智能化地运行,并在需要时,准确捕捉你所需的内容。通常来说,设置某种摄像机系统是非常困难的,例如第三人称摄像机,因为这通常需要智能取景和控制。因此在本节中,我们将介绍如何使用Cinemachine 2.6的新的瞄准功能(Aiming Rig)设置第三人称摄像机,以及如何使用Impulse Propagation和Blending为摄像机控制器创建其他游戏功能。详细教程请参考官方视频。


教程

    要在项目中使用Cinemachine,首先要从包管理器(Package Manager)进行安装,请注意,如果是从资源商店中的Cinemachine版本升级,你需要先从项目的Asset文件夹中删除Cinemachine文件夹,然后再通过包管理器安装新版本,安装完成。可以开始设置摄像机了。    

    在这个场景中,我有一个可以通过键盘或手柄控制的角色,我还可以瞄准、开弓和射箭。目前摄像机基本上是静态的,角色可以向前移动,但是从某个角度,控制角色的前进却很不顺畅。你可能会考虑将摄像机直接关联到玩家的Avatar上,但这导致游戏僵化而入味,对于许多玩家来说,这种方法会导致晕车一样的不适。现在就可以发挥Cinemahine的作用了。因为它可以更加轻松、快速地设置响应速度更快的第三人称摄像机。

    选择Cinemachine > Create > Virtual Camera 创建一个新的虚拟摄像机。可以注意到,摄像机就创建在场景视图中所需的位置上。这是Cinemachine 2.6的新功能之一,让取景和拍摄更容易。如果要创建的是静态摄像机。这个功能对于放置摄像机和固定镜头非常有用。

    对于这个Demo,我们将创建一个可以程序化放置自身的摄像机,在Cinemachine虚拟摄像机的Body中,将Body属性从Transposer更改到3rd Person Follow。

    接下来,因为要制作over-the-shoulder(过肩)摄像机。我们需要指定一个目标作为玩家的肩膀,我们还创建了一个名为Follow Target的子游戏对象,将它放在玩家脖子高度的位置,便于让Cinemachine聚焦,然后将它指定给Cinemachine摄像机的follow属性,Cinemachine摄像机将自动移并将自己放置在相对于目标的位置和前进方向上。

    我们可以使用Camera Side(摄像机侧面)滑块,比照两个肩膀调整摄像机的位置,也可以轻松调节Camera Distance(摄像机距离)和Field Of View(视场角),将摄像机放置在更佳的位置上,另外我们也可以调整3rd Person Follow设置中Damping的Z值,让摄像机在玩家移动时进行追踪,只用几个步骤,我们已经让玩家的响应更快了,并具有了更多拍摄自由。但我们还可以做一些设置让摄像机的功能更完善。

    现在,角色的旋转直接与输入绑定,但如果我们想以玩家为中心旋转摄像机怎么办?因为Cinemachine会追踪我们跟随的目标,所以我们可以旋转Follow Target游戏对象,而不用旋转角色,这样摄像机就会跟随目标的旋转,围绕角色旋转了。我们创建了一个脚本来检测水平和垂直输入,然后旋转跟随目标,这可以让摄像机围绕玩家旋转。

    还可以做进一步设置,根据控制器的垂直输入轴旋转跟随目标,这样摄像机就可以上下调整视角了。

    这里查看一下跟随目标当前的轴旋转,并限制旋转范围。

    以将摄像机固定在合理的垂直旋转范围中,之后只要我们移动。

    只要按照跟随目标变形的本地旋转,设置玩家的Y轴旋转即可,之后再重置跟随目标变形的本地Y旋转。现在我们有了一个可以正常工作且具有旋转功能的第三人称摄像机控制器,可让我们在移动时环顾四周,闲置时以玩家为中心移动和旋转,看起来不错,但还有可以做一些设置,来改善摄像机的感觉,玩家可以拉开弓,并将箭射向场景中的事物,但这个动作感觉太普通了。

    改善这种情况的一种方法是让摄像机通过Impulse Propagation来响应玩家射箭的动作。

    Cinemachine Impulse Listener功能,让摄像机等对象能够侦听并响应场景中的Impulse事件。

    收到Impulse源后,侦听器将根据Impulse事件中的噪音进行响应,我们希望摄像机在箭被射出时进行响应。

    所以首先,为虚拟摄像机添加一个Impulse Listener插件。

    接下来,选择要从中生成Impulse源的对象,这里我们希望箭被发射后立即触发Impulse。

    所以选中项目中的Arrow Projectile预制件,并添加Cinemachine Impulse源。Impulse源是场景中某个点发出的振动信号的组件,Impulse通道设置让我们能够筛选不同的Impulse事件和侦听器,如果只想某些对象,侦听并响应场景中对象的特定Impulse事件,这将非常有用。

    信号形状(Signal Shape)设置可控制Impulse源发出的振动的基本特征,再为Arrow Impulse创建一个新的原始信号(Raw Signal)资产,我希望 Arrow Impulse可以在垂直和水平方向上轻微摇晃摄像机,所以在X轴和Y轴这里画了两条曲线,这些参数目前是根据世界空间坐标定义的,稍后我们需要将它们转换为摄像机空间,这样无论摄像机朝向哪里,摄像机的抖动都是一致的。

    我们可以通过这些组件,设置Impulse事件的振幅和频率,并调整Impulse Blast的Spatial Range设置。

    振幅增益(Amplitude Gain)属性会影响Raw Signal发出的Impulse振动的强度,信号的形状得以保留,但它会根据增益设置进行增强或减弱。

    频率增益(Frequency  Gain)属性,会影响原始信号的计时,并控制振动的速度,可以将它看成一种加快或减慢时间的方法,这样信号就会在慢动作或快动作中完成。

    Time Envelope属性控制Impulse的持续时间和这段时间中原始信号的强度,它将创造一个适合信号的整体形状,这是一种控制噪音信号缓入和缓出的方法。

    重复模式(Repeat Mode)指定,是在持续时间内循环原始信号,还是拉伸原始信号适应时间范围,这里,让参数保持默认设置。

    Spatial Range设置,决定了Impulse Signal穿过的有效区域,这个空间范围内的任何侦听器,在被调用时都会受到Impulse的影响,Impact Radius决定了场景中Impulse源周围的空间。在这个范围内,信号是最满的,超出这个范围后,信号强度将根据耗散距离,逐渐减弱或衰减,这让远离Impulse源的侦听器,比离得近的侦听器响应更慢一些,因此需要牢记的是,信号的总效果需要将Impact Radius和Dissipation Distance结合起来。我们也可以通过设置耗散模式(Dissipation Distance)来定义Impulse源衰减的强度,由于箭将非常接近摄像机,因此我们不需要过多地调整这些默认值,最后是传播速度(Propagation Speed),它将控制Impulse事件通过Impact Radius的速度。如果希望事件逐渐通过影响区域,不要将速度设置的过高,这会让距离源较远的侦听器响应得更晚,这里我们希望Impulse可以快速移动默认情况下,它与声速保持一致,即343米/秒,有关Cinemachine中Impulse和Impulse源的更多信息,请点击官方视频中的链接了解。

    现在要做的就是,每当有箭发射时,就生成Impulse源,这可以通过创建对Impulse源脚本的引用,以及调用Generate Impulse方法来实现,我们还会传入摄像机的前向方向来生成Impulse方法,这样 Impulse信号就像我们刚才说过的,从世界空间坐标旋转到摄像机空间坐标,现在每当玩家射出箭时,摄像机就会响应并抖动,我们可以调整侦听器的增益,根据需要增加或减少噪音影响。

    请注意当玩家射箭时,屏幕中心瞄准线的位置,并不总是与玩家瞄准的地方对齐,这是由角色背后的摄像机视角和角色瞄准时的视角差异造成的,当角色瞄准近处的物体时,这种视差效果会更明显。

    我们可以使用第三人称瞄准组件,让瞄准线与角色的视角对齐。

    这个组件从跟随目标的位置,沿着其前进方向投射射线,并在射线与其路径上出现的第一个对象的交叉点上方,放置一个副瞄准线,这个瞄准线代表了,如果从那个地点和角度射出箭后,会射中的目标,最后一个让摄像机系统更加好用的功能是,在玩家执行不同的动作时,调整摄像机的设置,这可以通过切换不同的虚拟摄像机,并混合不同的摄像机状态来实现。

    例如,当玩家瞄准时,我们可以切换到具有相似设置,但FOV更紧凑,且右对齐的另一个Cinemachine摄像机。

    现在告诉你怎么做,首先,复制摄像机,并调整设置以便于瞄准,对于瞄准摄像机

    通过缩小视场角来放大场景,并缩短与玩家的距离。

    然后创建一个脚本来根据玩家是否瞄准来切换摄像机,这可以通过检查输入值,然后激活相应的摄像机实现,当按下按钮瞄准时,我们打开瞄准摄像机,并关闭主摄像机。

    不瞄准时就切换回去,还要将默认的混合时间从2秒调整为0.5秒,这样两种状态之间的过渡更快。

    现在,只要角色进入瞄准状态,摄像机就会切换Cinemachine就会将两者混合,如你所见,Cinemachine和第三人称Follow Rig,让我们可以轻松创造出更加动态化、更灵活的第三人称摄像机系统,要了解使用Unity摄像机的更多信息,或下载此项目并动手尝试第三人称摄像机功能,请访问官方视频中的链接。 

Unity学习笔记 Vol.74 使用Unity中的Cinemachine创建第三人称摄像机的评论 (共 条)

分享到微博请遵守国家法律