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

游戏原型系列 vol.20 如何实现爆炸箭机制

2021-01-29 12:35 作者:NXL2  | 我要投稿

摘要

    在本节中,我们将大致了解下如何制作一个带爆炸箭,可摧毁建筑物、第三人称人物控制的原型。我们将介绍原型制作流程,讨论人物控制的升级,怎么使用Cinemachine做出瞄准动作,爆炸箭的实现,可摧毁建筑及其消失效果,以及项目图像的改善。本节详细教程请参考官方视频。


教程

    爆炸箭在很多类型的游戏中都有出现,要做出爆炸箭,我们首先需要一个能移动、瞄准、射击的人物,由于本次爆炸箭是主要制作目标,我们用了一个现成的项目,原先用Cinemachine第三人称摄像机教学的项目,视频的链接也可以在描述中找到。

    项目包含了一些3D资源,地形纹理,能移动、瞄准、射击的人物和一个Cinemachine摄像机。

    我们使用环境资源制作了一个场景,将人物放在场景中间,在围住的区域里,放进了建筑,让人物用爆炸箭互动,而在围栏外边,放了一些不能互动的背景元素。

    Cinemachine带有许多第三人称摄像机的工具,资源包本身就带有许多预设,覆盖了多种常见案例。

    人物移动时的第三人称是用,Cinemachine上的部分属性实现的。

    Follow属性指明了摄像机的跟随对象,Body设为了Third Person Follow,可用于指明摄像机与目标间保持多少距离,在运行模式下,可以看到,摄像机能跟随、环绕目标,时刻保持Body中设定的偏离量。

    Cinemachine资源包的一个关键功能,就是自动处理摄像机之间的转换,如果禁用一个摄像机再激活另一个,会触发一个摄像机之间的转换,场景中加入第二个摄像机,其Body的偏移参数不同,且默认禁用。

    按下瞄准键便会激活瞄准摄像机,禁用虚拟摄像机,两者间有流畅的转换,新的视角更方便射箭瞄准,放开瞄准键后,再重新激活移动摄像机。

    Cinemachine还能在关键时刻晃动摄像机,产生更直观的反馈,晃动效果包括在了资源包内,这个拓展程序叫Cinemachine Impulse Listener,可在特定事件发生时晃动摄像机。    

    我们在射出箭和箭爆炸时创建一个晃动事件,给两个动作增加冲击力和力量感,让原型更富动态,在设置好摄像机后,再来着手制作人物控制。这里主要有两个重点,加入不同方向的移动动画及连贯合理的脚步。

    在讨论这些内容前,要提一下我们使用了Input System资源包来接收输入、控制人物,资源包在安装后会自动覆盖默认输入系统。

   创建一个称为Input Action Asset的资源,我们可以Move这类动作,绑定到键盘、摇杆等的输入信号上。

    起初弓箭手在各方向上都使用一个跑动动画,在向侧面移动时非常不协调,因此我们又增添的三种动画,每个方向一种,并更新的动画控制器。

    这时我们需要混合两个以上的动作,我们删去了单个动画状态,用混合动画树替代,动画树可保存多种动画,在混合参数后,糅合两个不同的变化角,形成流畅的动画过渡,这里需要混合的参数为xy轴运动输入,输入信号经由C#脚本传给动画控制器。

    在设置好人物后,我们再来制作武器,设计想法是制作一种延迟爆炸箭,用来炸毁场景建筑,炸弹在击中刚体时会变为Kinematic。

    接着在爆炸倒计时时,箭头的材质会随机破碎,给人一种有事要发生的感觉。

    倒计时完成后,炸弹爆炸,给球形范围内的刚体添加一个力。我们还制作了一个卡通粒子系统来提升爆炸视觉效果,炸碎建筑的效果用了三个GameObject,一个父对象、两个子对象,第一个子对象是一整个建筑网格,第二个子对象带有大量碎片对象,默认禁用,每个子对象为一个网格,即建筑折碎片,在爆炸发生时两个GameObject会互相切换。

    箭在命中时会搜寻Destructible组件,在找到组件后便禁用整个的建筑,在爆炸时后启用可破坏的建筑,切换发生在爆炸的同一帧上,在爆炸为范围内刚体施加力之前,建筑在被摧毁后碎片会散落一地,为了防止碎片积累过多,我们用ShaderGraph制作了一个消失着色器,让碎片在散落几秒后逐渐消失,最后为了提高工程的视觉外观,让爆炸效果更显眼,我们将场景切换成了月光下的夜晚景色,借助泛光(Bloom)后期效果,爆炸的光效能在环境里更亮、更突出,最后我们给光照添加了雾气。

游戏原型系列 vol.20 如何实现爆炸箭机制的评论 (共 条)

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