FPS游戏初开发--逻辑分析总结


(图片来自网络,侵权可删)

FPS游戏,即First-person Shooting Game,第一人称射击游戏,说到FPS游戏,相信大家第一个想到都是经典的CS,近几年优秀的FPS游戏也是不少,比如CS续作CSGO,腾讯搞的CODOL,育碧的彩虹六号,暴雪的守望先锋,以及蓝洞的绝地求生(纠正一哈,这个应该来说是第三人称,严格来说不算FPS游戏)。

FPS游戏的玩法大多都是一把枪,对敌人进行射击,没有太多的动作,行为方式看起来都比较简单(这里小编再吃一哈书,守望先锋的行为方式可太多太难了),于是抱着这种心情,小编也开始自己开发简单的FPS游戏,结果在开发的过程中发现其实也没那么简单,最后也是花了近一个月时间才算是完成。

那我们先来简单的分析一下FPS游戏有哪些需要我能完成的动作:

1.射击:

射击是这种游戏的最核心的玩法,当然是必不可少的。

2.换弹:

射击消耗的是子弹,那么也就是说我们再弹夹内子弹消耗殆尽的时候,我们需要做的操作就是换弹夹,这也是必不可少的。

3.换枪:

小编这里开发的项目复刻的是CS这个游戏,也就是说我们可能手上不止一把枪,那么换枪操作也是必不可少的。

4.死亡:

我们的血量不是无限的,所以在被命中受伤的时候如果血量到0以下了我们就会死亡,这也是必不可少的。

好了,可能用心的朋友发现我们上面每说一条都会说必不可少这个词语,对,没错,其实完成一个FPS游戏我们还可以对其 加入一些更多的操作,比如跳跃,甚至是像COD和绝地求生一样贴近墙面时的翻墙动作,这些小编这里就不再对其逻辑进行赘述了,有兴趣的小伙伴可以自己去试试。

现在我们就开始进行开发,这几个动作我们要如何进行处理呢?其实很简单,给我们每个角色两个变量,一个血量,一个子弹数,然后当角色开始射击的时候,消耗子弹,当子弹打完的时候进行换弹操作,被命中后角色开始减血量,当减到0以下就死亡,之后角色就不能做任何动作,过一会儿销毁角色。

听起来是不是很简单?小编一开始就是这样想的,因为是自己开发,小编也没有做写文案,做测试,备份,版本控制这些开发常规操作,提着键盘就开始干……然后一运行,一万个BUG……

这里我们先说下射击,小编在对射击的处理时,命中的判定是看准心位置的,换个说法,其实命中判定是看目标是否在我角色摄像头的真中心,而不是看目标是否在我枪前面。其实这个问题是很多游戏中都有,我们射击时子弹到底应该是从枪口出还是从摄像头中心出,这个问题当我们在墙边时尤为体现的突出,有时候在角色面前有一个和抢高度等高的墙面,但是我们第一人称的视角的准心并没有被墙面挡住,那么这时要怎么处理呢?这里我们可以看看目前一些比较优秀的FPS是如何处理的,首先是彩虹六号,这个游戏很多网友都在调侃它是用瞄具在射击,只要我们能瞄到的地方就能达到,不管是否枪口被墙面堵住;再来就是绝地求生,这个游戏当我们在墙体前面时,也就是准心和枪不在同一个位置的时候,会有一个收枪的动作,所以我们在墙体前时,会出现我们能看见目标,却不能射击的情况。

举这两个例子,小编就是想说明对这个子弹出点的说明,当然出于真实,小编更倾向于后者,这个小伙伴可以根据实际情况进行调整。

讲完射击我们再来看下另外两个操作,换弹和换枪,因为没有做过多的考虑,小编的这两个操作也就完成了动作,结果……我在射击的时候按了一下换弹,发现居然枪还在开枪……按理来说我们一按换弹,开枪就应该会停止才对,不止如此,在换枪的时候也是这样……

当然这还算比较好解决的,我们只需要在换枪和换弹的时候调用一下我们开发的松开左键的操作,也就是停止射击。

这两个操作这就好了吗?我们再仔细分析,换枪操作是随时都能按的,但是换弹操作是随时都能按的吗?当然不是,如果我们正在换弹或者正在换枪,这个过程肯定是不能再进行换枪操作的,否则一直按R就会一直播放换弹的鬼畜动画……行吧,小编又加上了对换枪和换弹的时间判断来处理这个问题,说到换枪可以随时按这里,小编又发现了一个BUG,因为小编在对换弹的操作编写的时候的逻辑是先把子弹换好再进行换弹的动作,那么当我们用换枪的动作终止换弹时应该就没有换好子弹,行吧,这其实也算比较好解决的,只需要把子弹这个变量更新填满这个操作换到动画放完时就行了。

好,这下看起来没什么问题了,于是又运行测试,这时小编又发现了一个不得了的BUG……因为小编拿子弹数作为角色的变量,所以当小编在换枪操作的时候发现,子弹数居然没变!!!按理来说,每一把枪的子弹应该都是独立的,换枪应该子弹换为当前枪的子弹数。

这个就没有那么好处理了,因为我们要对整个项目的角色和枪进行重构……

到了这里原本小编觉得一周可能完成的工作终于也是在一个月内完成了,到了这里我们简单的FPS游戏就算是完成了,当然只是完成了最简单的一些操作离真正的FPS还是蛮遥远的,开发这个项目,因为小编想的太少,导致整个过程变的比想象中复杂了很多,希望大家以我为鉴,在开始开发前多想想就能在开发过程中省下很多不必要的事。

猜你喜欢

转载自blog.csdn.net/RaAlGhul/article/details/80223207