How To Make


说说制作中的一些要点

制作动作游戏之所以考验功力,是因为这种类型做出来是好是烂可能就只有“一帧”的隔阂。虽然我的初次尝试还有很多缺陷,但我忍不住要对这次的制作作一次总结,我也想以这种方式来致敬曾带给我们“热血回忆”的创作者们。

1.移动问题

一般在2D游戏的制作当中,人物的跳跃动作会在Y轴向上进行,这样的方式如果去制作平台动作这类游戏可以,但清版动作游戏不同,人物不仅可以跳跃还能上下移动,如果使用Unity2D的制作流程同时在Y轴上兼顾这两种方式的运动很难,既然Unity是一款3D引擎,那么Z轴向的空间就不能浪费,跳跃仍然在Y轴上,而人物的上下移动在Z轴上,给摄像机(投影方式为正交投影)调整一定的夹角,这样呈现出来的画面就是既可以跳跃又可以上下移动。

这是个“伪2D”游戏

2.基于动画状态机做成的“动作系统”

制作动作游戏最门槛的一部分就是要达成“手感”这个虚无又缥缈的标准,首先要做出按键输入的频率判定,其次是动画帧的调试,动画方面跟主流的方式一样,我使用了动画状态机来制作人物攻击动画的组合,而指令方面并没有写一个“计时器”来判定按键输入的间隙,因为这样会让代码变得冗长繁琐且效果不一定好,取而代之的是在每一次攻击转换的AnimatorTransitionBase中修改ExitTime和TransitionDuration参数的大小,例如从角色的站立动作到第一次拳攻击,并不勾选ExitTime选项,这样的效果就是只要条件满足,不需要播放完站立动画就直接转换到出拳动画的状态,而第一次出拳到第二次出拳则勾选ExitTime,以此类推,后续的攻击动作转换,则逐步增大ExitTime和TransitiDuration参数的值,这样就做出了连续按键打出基本连击的效果。




单纯靠Animator做出的连击系统

Animator状态机

3.动作游戏的核心——“判定框”及“动画事件”

每个人物角色都使用一个“cube碰撞体”作为攻击判定框,这个碰撞体在平时是关闭的,只有在攻击动画的某一帧才设定为开启,为这个碰撞体类中声明一个OnTriggerEnter函数(跟制作射击游戏的“子弹”物件类似)来检测攻击时会用到的一些功能,例如传递伤害值给被攻击到的敌人,让敌人播放受击动画等等。

在某一帧让攻击判定框开启

Unity的Animation编辑器不仅能够设置游戏对象的子物件和组件的每一个属性参数,还能在每一个动画关键帧上添加“事件(Event)”,这个“事件”是可以作为函数(function)在脚本中事先声明好的,当动画进行到这一帧时便执行这个函数,这样可以大大的减少代码的负担。例如在播放攻击动画的第一帧开始,就要让该角色强制停止移动,这时可以在攻击动画的第一帧添加一个"事件",这个事件让角色移动的速度为0(如动图),同样的也可以用这种方法让受击的敌人硬直或者在某一帧让游戏的Time.TimeScale变慢等等。(这里的TimeScale指的是Unity API提供的用来控制游戏运行速度的属性值,当这个值为0时,游戏会完全静止,通常用这个可以实现“慢动作”(Slow Motion )的效果,在这个项目中我用这种方法来制作打击动作的停顿效果)

4.用“继承”的方法制作多种敌人

普通的杂兵类敌人只具有一些基本的攻击手段和功能(譬如跟随玩家,绕到玩家背后,多个敌人出现时会自动散开),换换美术素材,改变移动速度,攻击力之类的变量就能制作出多种杂兵了,而Boss或者一些高阶级的敌人就应该具有更多的“招式”,同时他们也具有杂兵的基本功能,有一定编程经验的朋友就会知道,面向对象的编程其中最大的一个特点就是引入了“继承”的概念来规划程序,这样的好处在于可以避免重复代码的编写,合理的利用资源,在制作Boss的时候,让这些Boss的“子类”(Class)继承自普通敌人的“基类”,在“子类”当中添加新功能,譬如多种攻击手段和被打败后读取下一个关卡的功能,而动画方面Unity很好的提供了一个叫作Animator override controller的组件,跟Animator Contorller一样,用来控制动画状态机的逻辑,而前者可以继承另一个Animator Controller,可以把原动画状态机中的所有逻辑映射过来,这样便大大减少我在制作另一种敌人动画时的重复工作量。

用两条射线检测旁边是否有“同伴”,有则自动散开,这样多个敌人就不会重合在一起了

像这样只要把制作好的动画片段(Animation Clip)拖放到相应的状态机映射过来就行了

即使不算是个合格的“作品”,但有一定的参考意义

以上的总结只不过是浅尝辄止,制作动作游戏还需要更多的功力,目前游戏只是作为一个动作清版游戏的模板范例被制作出来的,具有此类游戏的一些基础“功能”,而想要成为一个完整的作品还缺乏更多的“设计”,所以我从一开始就打算把游戏的工程包分享出来,如果时间充足,我会制作一个视频系列教学,演示如何从零开始制作这个游戏。(开了个巨坑)

itch.io是国外最大的一个独立游戏分享社区,除了来自全世界的独立开发者分享的独立作品以外,还有大量的素材资源,我也将游戏文件以及工程包上传到了itch.io,下面是这个游戏的下载链接,免费的,欢迎有兴趣以及也在学习游戏引擎的朋友捧个人场,我也希望能跟更多喜欢游戏和制作游戏的朋友们互相交流学习:

Files

StreetOfRage.rar 47 MB
Mar 02, 2018
Beat Em Up Web.zip 43 MB
Mar 02, 2018
BackToStreetOfRagePackage_1.10Version.unitypackage 116 MB
Jul 24, 2018
PhysicsManagerSetting.png 37 kB
Jan 02, 2018

Get Beat Em Up Template for Unity

Buy Now$2.99 USD or more

Leave a comment

Log in with itch.io to leave a comment.