空洞骑士是一款基于横板平台跳跃的传统风格2D动作冒险游戏。庞大的游戏世界交错相通,玩家控制小虫子去探索幽深黑暗的洞穴,成为了一代人茶余饭后的惦念,深受广大玩家们的喜爱。
这类平台跳跃游戏一般是游戏开发初学者以及独立游戏开发者们比较青睐的类型,也是诸多开发者们开发游戏Demo的第一站。
为了让更多的游戏开发者们能够做出自己心中想要的平台跳跃游戏Demo,今天我们讲解如何使用Unity3D引擎制作此类游戏。
我们需要掌握以下三项基本的游戏开发技术。
1、角色操控以及手感优化的技术要点
2、角色的四方向射线检测的技术要点
这里我们涉及到引擎如何控制一个游戏物体完成移动的知识。
对于Unity3D引擎来说,移动一个物体的核心原理是每一帧更新物体在3D坐标系中的位置。
对于横板游戏来说,我们关注的是水平方向和垂直方向的移动,而对于Z轴纵深方向的移动,除了某些特殊情况外,角色部分基本不需要考虑。
而对于移动而言,我们可以使用基本的平移方法Translate来完成移动,也可以通过更新Transform、Postion来完成移动。同样可以通过对角色对象添加刚体组件Rigidbody,然后通过设置刚体组件的velocity属性来完成移动。
当然你也可以通过使用Unity引擎提供的角色控制器CharacterController 完成对角色移动的控制。还有一些提供移动方法的插件这里就不做过多的赘述。
面对众多的移动选择,该选择哪一种成了初学者们最容易头疼的地方。由于刚体和角色控制器都自带了碰撞检测,所以很多同学会选择这两者之一作为2D平台跳跃移动的方式。
许多游戏开发者在游戏开发到中后期时往往会遇到很多棘手的问题。开发者们为了维护和修改这些问题往往付出了非常巨大的代价和精力,却始终没有办法从根本解决问题。这就导致了很多游戏最终无法开发完成,开发者为此也付出了高昂的学习成本。
所以这里我们推荐大家使用最基本的Translate方法来完成移动。因为它足够简单,没有过多的牵连,可以为开发者们提供最大程度的可操作空间。
同时,因为刚体组件和角色控制器会涉及到一定的引擎物理,而平台跳跃游戏中产生的物理情况,大部分并非模拟现实的物理情况,所以我们需要自己来为它开发相关的物理部分。
这时使用引擎自带的物理反而会产生很多的不可控问题,导致意外情况的增加。因为Translate方法本身没有自带碰撞检测,所以我们还需要提供一些可维护性以及可控制性强的物理检测方法。
来看看下图中的方法:
这里我们使用射线检测的方式来完成,这个方法包括但不限于撞墙检测、脚下地面检测、头顶碰撞检测、穿越平台检测、爬坡检测等。
这里使用角色控制器的同学可能遇到过类似跳跃失败、爬坡控制性不强的问题,出现这个问题的具体原因上面已经做过阐述。
二、角色的四方向射线检测的技术要点
这里主要的技术要点在于为了达到精确检测和掌控力更强的控制碰撞。平台跳跃类游戏一般不会使用Unity3D自带的刚体及碰撞器来完成各项碰撞检测,取而代之的是使用基础射线。
为了能够检测角色脚下、头顶、前后方是否碰撞各类平台以及怪物、道具等,我们需要搭建一个健壮的射线检测基础架构。这里需要注意的技术要点有:射线检测的数量、检测的时机、检测的层、检测的起点、方向以及长度等。可以帮助我们完成游戏中需要的各项检测,同时能够达到非常精确的控制以及按需检测等多项好处,是同学对于平台类游戏碰撞检测的必学核心技术点之一。
三、各种平台的技术要点
最后我们说说游戏中各项平台的功能。横板跳跃游戏中,平台分为基础平台、可向下穿越平台、可移动平台等类型;又可以组合出可移动基础平台、可移动向下穿越平台、不可移动基础平台和不可移动向下穿越平台等多种类型的平台。
在要点二中我们可以知道,对于角色检测平台,一定离不开射线的辅助。而平台的制作,主要是基于平台的位置和位移,来精确的修正角色的位置和位移。比如在落到平台时,角色需要精确的修正Y轴坐标为平台接触点坐标,而跳起来顶到头上的平台时,需要修正坐标为接触点坐标减去角色碰撞器高度等。
对于移动平台,初学者容易进入一个误区,就是让角色成为平台的子物体以帮助角色在平台移动。而这样操作的结果是丧失了精确性,容易产生更多bug,并且不符合我们的框架设计原理。
正确的做法是通过每帧修复角色的位移,让角色位置能够叠加平台的移动方向的速度产生的位移以及角色自身控制产生的位移,这样才能够在统一的框架下完成精确的处理。
关于2D平台跳跃游戏的技术点我们就分析到这里,为了让喜欢游戏开发的小伙伴能尽早开发出自己的《空洞骑士》类游戏Demo,我们开设了《3D版空洞骑士》4天训练营,让大家从0做出一款游戏Demo。扫描下方二维码回复[空洞骑士]即可免费参与