分类
塔防 游戏设计

AT君的高级弹道学手册

之前的《弹道学手册》搜集了很多游戏中的飞弹,但并没有提取出其中的共同点。本文作为续篇,尝试从游戏机制的方面对这些飞弹进行分析,希望能够形成一套模型,通过不同的配置就可以实现各种各样游戏中常见的飞弹。

笔者写的差不多后回头再来看这篇文章,实际上大部分的东西都能够在暴雪的游戏中找到对应的例子,如果这个体系能够完整地搭建起来的话,是能够实现暴雪的游戏中的绝大多数远程攻击和法术攻击的效果的。

下面每一段都会用来描述飞弹某一方面的特性,并且是按照重要程度排序的。笔者不懂程序,但我尽量把每段写得足够详细,希望能够达到可以作为文档的地步(有点难,其实我还在整理思路中)。

瞬间/飞弹

第一个最重要的区分是,一次攻击是瞬间就完成,还是会发射一个随着时间移动的飞弹,过一段时间之后才有可能击中敌人。从数学的角度上来说的话,瞬间完成的攻击实际上是飞行速度无限大的一种特殊飞弹,但当速度无限大时,飞弹的很多特性都会发生变化,因此最好在最基础的层面把瞬间命中的攻击和发射飞弹的攻击区分开来。

《魔兽世界》中萨满的闪电链是瞬间击中的,而闪电箭则是一个需要飞行时间的飞弹。

《魔兽争霸3》中就是这么做的(此处感谢Walter大神)。大部分的近战攻击实际上也就是射程非常短的瞬间攻击。但也有一些游戏不存在瞬间攻击,即便是传统的近战职业如战士的攻击也是通过发射飞弹完成的,只是飞弹的射程很短,感兴趣的玩家可以去看看《Realm of the mad god》这款免费的网络游戏,在Steam上可以玩到。

但是,一次瞬间就完成的攻击也不一定是100%命中的,例子就是《暗黑破坏神3》中法师的裂光波。这个区别会在下一段进行说明。

另外,瞬间型攻击更有可能表现层与逻辑层相分离,而飞弹的表现层和逻辑层更有可能是统一的,也就是飞弹拥有真实的碰撞盒。这个也会在后文提及。

是否有锁定目标

现在很多ARPG都在说自己是无锁定战斗,指的是技能或攻击玩家不需要先选中一个目标才能使用,攻击或者技能可以随便想往哪里发动就往哪里发动,更类似于动作/射击游戏而不是传统的RPG。

飞弹也是如此。RTS或MOBA中的飞弹与射击游戏的飞弹有一条很大的区别,RTS或MOBA游戏中远程攻击发射的大多数飞弹都是由锁定目标的,而射击游戏的大多数飞弹是没有锁定目标的。

从另一个角度来考虑,假设一个飞弹有意识的话,那么有锁定目标的飞弹就会想着去击中那个目标,而没有锁定目标的飞弹只会沿着轨迹移动,直到撞到什么目标为止。

《保卫萝卜》中的瓶子炮是有锁定目标的,而风扇和火箭是没有锁定目标的。

上一段中提到的《暗黑破坏神3》中法师的裂光波,就是一种没有锁定目标的瞬间攻击。而《DOTA》中电魂的普通攻击,《魔兽争霸3》中的闪电链和叉状闪电就是一种有锁定目标的瞬间攻击。

对于飞弹来说,如果有锁定目标就意味着它在飞行过程中会不断调整自己的飞行方向以求命中,《魔兽世界》和《EVE》中的大部分投射物都是如此,但是这种游戏的表现层与逻辑是分离的,并不像射击游戏一样飞弹会产生真实碰撞,但好处是能够降低计算量。没有锁定目标的飞弹就只是沿着直线或抛物线一直飞下去,在大部分游戏中这种飞弹一旦被创建后就不会再有任何东西能够影响其运行方式,这种飞弹是可以通过AI计算提前量来提高命中率的。但这样一来在碰撞检验之外,就有了更大的计算量和AI复杂度。

注意,飞弹虽然没有锁定目标,但不意味着发射飞弹的炮塔没有锁定目标,这是两个不同的概念。俗话说子弹不长眼,一个人想要打目标A但最终却击中了目标B的情况是非常常见的。但当飞弹有锁定目标的时候,大部分情况下都与炮塔锁定的是同一个目标,不过也有一些例外的情况,比如《风暴英雄》中维拉的Q(或者《暗黑破坏神》中亚马逊/恶魔猎人的向导箭)。

是否是持续攻击

如果不是持续攻击,则攻击方是一下一下进行攻击的,就像砍柴一样;否则攻击方的攻击是持续的,就像水流一样——或者换个例子,就像《魔兽世界》中的引导性法术一样。《星际争霸2》中的虚空辉光舰、哨兵等单位也是进行持续攻击的。当某个单位的攻击非常密集频繁的时候,就可以认为这个单位是在进行持续攻击了。

从伤害事件的逻辑上来说,并不存在持续攻击,所谓的持续攻击或者Damge over time(DOT)依然是每隔一段时间造成的伤害,但可能由于间隔很短玩家难以察觉。《魔兽世界》中的DOT间隔是3秒,而《星际争霸2》中的虚空辉光舰,以及《风暴英雄》中阿兹莫丹的E技能间隔都很短,每秒重复数次。

持续攻击与非持续攻击的差别主要是在表现层。首先,攻击者的动画会有所不同,如果攻击者不是持续攻击的,则是每次攻击的时候播放动画,如果是持续攻击的则是在攻击时一直循环播放一个动画。《魔兽世界》的引导中动画是个很好的例子。

其次,瞬间型攻击的表现会差很多,不管是《暗黑破坏神3》法师裂光波,《风暴英雄》阿兹莫丹的E还是《星际争霸2》的虚空辉光舰,这些射线的显示方式与普通飞弹差很多,一般都拥有“开始-持续-结束”三个阶段。对于飞弹来说,是否是持续攻击表现没什么差别——对比《魔兽世界》中的奥术飞弹和火球术,只是施法动作不同,飞弹是十分类似的(奥术飞弹那是引导性法术,火球术不是)。

《魔兽世界》中正在引导施放奥术飞弹的法师

综上,持续攻击可以让我们做到这种激光持续伤害的效果,对攻击者和飞弹的表现有很大影响,并且持续攻击的伤害间隔都很小。说句题外话,实际上近战攻击也可以是持续攻击,比如《英雄联盟》中盖伦、潘森的E。如果想做的话,天马流星拳、北斗百裂拳什么的也都可以做!

运动起点

如字面意义,运动起点就是一个飞弹的运动轨迹的起始点。对于瞬间飞弹来说,这个属性也是有意义的,如果是闪电或者射线,运动起点就是闪电或者射线的发射点。这个要看游戏的逻辑层与表现层的具体关系,以及闪电或者射线表现上的具体实现方式。

运动起点并不一定都在炮台上,虽然对于大部分炮台来说是这样的。有个例子是《命令与征服》中的Icon Canon,或者是《风暴英雄》中诺娃的大招定点打击,或者是《星际争霸2:虚空之遗》中从蟑螂进化来的新单位掠食者的攻击方式。对了,《魔兽争霸3》中的群星陨落也是一个很好的例子。

《暗黑破坏神》中的陨石术,陨石是从天而降的,并非从法师的手中发出。

这几种攻击方式从表现上来看,飞弹是从天空中出现垂直轰击地面的,因此运动起点不是在攻击单位上,而是在被攻击单位上。类似的,飞弹还可以从地下钻出,等等等等各种有想象力的方式都可以。注意,蟑螂

运动起点在炮台的情况下也可能发生一些偏移,比如某个炮台一次能够并列发射多发子弹,为了让这些子弹不互相重叠就需要对子弹的运动起点进行一定程度的偏移。还有一种可能性是配合美术上的发射点如枪口、手掌等等,把运动起点偏移到这些位置上。

运动轨迹

对于有锁定目标的飞弹来说,知道了运动起点也就确定了运动轨迹。对于瞬间型攻击和飞弹型攻击来说都是如此,不过飞弹型攻击的计算会更复杂些,可能是实时计算的而不是预先计算的。对于没有锁定目标的飞弹来说,飞弹的运动轨迹则是由方向、速度、加速度等数值来决定的。

运动轨迹最简单的是沿直线运动,复杂一些的则是抛物线、曲线、各种线等等(想想《炉石传说》法师的奥术飞弹)。对于追踪飞弹来说,一般还会有最大转角速率一类的属性。

《炉石传说》中的奥术飞弹沿着一条曲线运动。

飞弹的运动轨迹是仅仅表现层的eye candy,还是会影响实际的游戏性,要看飞弹是否有真实的碰撞。

是否有真实碰撞

我们对比一下《星际争霸2》虚空辉光舰的攻击,以及《暗黑破坏神3》法师裂光波的攻击。同样是射线,但虚空辉光舰只能攻击一个单位,裂光波却能攻击到轨迹上的全部敌人,因为裂光波的动画是有实际的碰撞的,而虚空辉光舰的攻击动画只是一个表现。

总的来说,越具有真是碰撞,越接近于动作射击游戏而不是RTS游戏。

《保卫萝卜》中相当多的炮塔攻击都是拥有真实碰撞的,而瓶子炮、便便塔、魔法球则没有真实碰撞。《炫光塔防》中的绝大多数防御塔发射的飞弹都是拥有真实碰撞的。是否具有真实碰撞对于玩家来说都是简单易懂的,只要在表现上符合这一点。

《炫光塔防》中的炮塔正在攻击,如果敌方单位移动过快,炮弹就会从他们身旁擦肩而过。

销毁条件

一个飞弹是怎么被销毁的?对于瞬间型攻击和飞弹型攻击来说差别比较大。

如果是持续性的瞬间型攻击,由于在表现上是按照“开始-持续-结束”三个阶段来进行的,因此停止攻击后飞弹就会消失。不过也有特殊一些的情况,比如我们设计某个光束以射线的方式向前方穿透,但穿透数个敌方单位后就停止了,在这种情况下就需要计算光束的具体结束点在哪里。偷懒一点的话也可以做成光束依然看起来穿透了所有敌人,但实际上只有前几个敌人受到了伤害,不过这种做法略逊一筹。当然,这要结合游戏中的持续性瞬间攻击的动画是如何实现的,假如是由“发射点特效-射线特效-轰击点特效”三部分连接在一起形成的,在这种结构下只要调整轰击点特效的位置,并且响应地调整射线特效动画的长度就可以了。

对于非持续性的瞬间型攻击来说,由于每次伤害都立刻完成了,因此飞弹也是立刻就被销毁了。

对于飞弹来说,销毁的条件就变多了。命中次数,生存时间,坐标,碰撞等等都可以成为销毁条件。

分类
塔防 游戏设计

AT君的弹道学手册

大家好,欢迎来到ManiaHero,我是博主AT君,今天打算把酝酿已久的一份给力干货(自认为)写成博文,整理一下游戏内各种常见的飞弹。如果你对射击游戏或者RTS感兴趣,快来和我一起学习,分分钟变为弹道学学霸吧!(这句略拗口)

【1】直线单体必中飞弹

代表单位:《帝国时代1》的弓箭手,《海岛奇兵》的步兵

直线飞行,只会击中被攻击的单位,命中率100%。看起来飞弹会穿过一些单位,但其实只会击中被锁定为攻击目标的单位。如果飞弹在飞行的过程中目标单位已经被摧毁,则飞弹会继续飞行一段距离之后消失。

虽然理论上来说弓箭手的弹道应该是抛物线,但《帝国时代1》中的弓箭手是直线射击的,我们就不要对老游戏太苛求啦!

【2】直线单体真实碰撞飞弹

代表单位:《合金弹头》的小手枪、H枪,绝大多数射击游戏的飞弹,《英雄联盟》莫甘娜、光辉女郎、蒙多医生的Q技能

这种是射击游戏中最常见的飞弹,飞弹发射后沿着直线一直运动,直到与某个目标碰撞发生爆炸,或者直接飞出屏幕超出最大飞行距离。有一些塔防中也采取了这种机制作为基本的飞弹机制,比如《炫光塔防(Hex Defense)》。对于这种飞弹来说,飞行速度很重要,因为飞得越慢越不容易命中。玩家需要预判目标的移动进行射击。

【3】直线贯通真实碰撞飞弹

代表单位:《暗黑破坏神3》法爷的秘法光球,《合金弹头》中的F枪

这种飞弹与②十分类似,会沿着直线不断的飞行,但在击中一个目标后不会销毁,而是继续飞行,从而伤害更多的后排敌方单位。不会重复对同一个敌方单位造成伤害。

在很多游戏中,这种飞弹表现为火焰喷射器一类的武器,飞弹飞行的速度可能较慢。

=============================================================

下面开始是瞬间伤害类。

【4】直线瞬间单体必中飞弹

代表单位:《DOTA》电魂的普通攻击,《魔兽争霸3》的闪电链与叉状闪电,《星际争霸2》中的枪兵、死神、白球、雷神、坦克、虚空辉光舰、哨兵等

与①类似,只会命中被锁定的攻击目标,但是飞弹的飞行速度无限大,或者说是在发射的一刻就命中了对手。由于瞬间到达的特性,因此在大多数游戏中表现为闪电之类的飞弹。

【5】直线瞬间单体真实碰撞飞弹

代表单位:《暗黑破坏神3》法爷的冰霜射线,《DOTA2》火凤凰的E,《反恐精英》的几乎所有枪械

向前方发射一条射线,命中第一个击中的单位。射线的飞行速度无限,一般会有个最大距离。一般游戏中会表现为射线或狙击枪。

【6】直线瞬间贯通飞弹

代表单位:《暗黑破坏神3》法爷的裂光波,《反恐精英》的狙击枪,很多飞行射击游戏BOSS的激光束如打击者1945 Fiat G-56机的蓄力攻击

也是面向某个方向瞬间发射一条速度无限的射线,贯穿第一个敌人,命中后面的更多敌人。和⑤一样,多表现为激光束或狙击枪。

到这里可以总结一下了,所有的直线弹道飞弹基本上属于这六大类型,可以看出来,【3】【4】【5】其实就是【1】【2】【3】的速度无限大版本,但实际在程序的实现上方式相差可能是相当大的!于是我来一个分界线吧。

=============================================================

好,下面开始是追踪飞弹。

【7】追踪单体必中飞弹

代表单位:《星际争霸》的绝大多数远程单位,如龙骑士;《命令与征服》的导弹兵;《DOTA2》与《英雄联盟》的绝大多数远程普通攻击

飞弹会一直追踪锁定的特定单位,直到击中,命中率100%。如果飞弹在飞行的过程中目标单位已经被摧毁,有些游戏中的飞弹会立刻爆炸,有些游戏中的飞弹会重新定向一个新的目标,有些游戏中的飞弹会沿着直线继续飞行下去直到爆炸。如果目标的移动速度大于飞弹的移动速度,永远无法命中,因此这种飞弹一般有最大存活时间,飞行一段时间后如果还没有命中就销毁。很多射击游戏中也会有这种飞弹作为辅助的攻击手段。

绝大多数塔防中的飞弹均属于此类,这是因为《魔兽争霸3》和《星际争霸2》中这种飞弹被作为默认飞弹用的非常多,因此受到这个影响MOBA游戏和塔防游戏中这种飞弹也用的超多。

【8】追踪单体真实碰撞飞弹

代表单位:《虚幻竞技场3》的Rocket Launcher

与③类似会不断追踪某个单位,但会与任何敌人发生真实碰撞而引爆。在FPS游戏中较为常见,在其他视角的射击游戏或上帝视角的RTS游戏中不怎么常见。由于有制导功能,一般不是表现成导弹就是表现成火箭。

=============================================================

下面开始是抛物线类。抛物线的起点和终点不一定在同一个水平面上,比如可以从飞机上投弹,也可以从低处向高处发射。

【9】抛物线单体必中飞弹

代表单位:《国王守卫军》的箭塔

实际的逻辑和①类似,是一种只会对锁定的目标进行攻击的飞弹,表现起来是抛物线,但实际上一定会命中。实际上二者的逻辑没有区别,但可能某些飞弹不适合表现成能够追踪敌人的,因此做成了【1】的样子。

如果未能命中则落在地上,一般的表现形式是弓箭。

【10】抛物线单体真实碰撞飞弹

代表单位:《帝国时代2》的弓箭手,《合金弹头》的手雷,《愤怒的小鸟》,《要塞》的弓箭手,《骑马与砍杀》的弓箭,FPS游戏中的榴弹,《弹弹堂》类型的射击游戏

一个按照抛物线运动的飞弹,并且会和敌方单位进行真实碰撞检测。在纵版2D射击游戏以及FPS游戏中很常见,在RTS中也有一些如《帝国时代2》或者《要塞》的弓箭手,但由于在RTS中地面单位都是在一个平面上而不入纵版游戏中明显。

【11】抛物线对地攻击飞弹

代表单位:《魔兽争霸3》中的投石车,《百战天虫》的手雷,《流亡黯道》的熔岩打击

同样是抛物线,但不会与敌方单位碰撞,而是落到地面后才会爆炸。

很多游戏中的抛物线飞弹是在落地后可以弹跳的,如《合金弹头》的C枪,《英雄联盟》爆破鬼才的Q,《命令与征服》GDI的掷弹兵等等。

=============================================================

下面开始是地面飞弹类。地面飞弹指的是沿着地面运动的飞弹,大家可以想象一下《拳皇》中八神庵的暗勾手,或者《DOTA》中就是一种沿着地面运动的飞弹。这类飞弹很少,一般是需要特殊机制的支持才会有存在的意义,否则与【1】~【6】飞弹区别不大;比如《拳皇》是格斗游戏,飞弹运动的高低会影响命中,而俯视视角的游戏中这种飞弹的机制一般与地形紧密结合,如《星际争霸》中的金甲虫,《DOTA2》中召唤师的混沌陨石(不断向前滚动的大陨石)。《流亡黯道》中的地面飞弹则有着和人物同样的寻路逻辑,因此在《流亡黯道》中【1】~【8】类飞弹能够穿越一些小障碍物,但地面飞弹不能。地面飞弹一般还不能跨越地形高低差,如悬崖或者瀑布等。

【1】~【8】类基本都可以转换成对应的地面飞弹(即下面的【12】~【19】),因此这段我会简单写一写。

【12】直线单体必中地面飞弹

代表单位:《流亡黯道》中的闪电打击

与【1】类似,不过飞弹是沿着地面运动的,只会击中被锁定的攻击目标。

【13】直线单体真实碰撞地面飞弹

代表单位:《拳皇》八神的暗勾手,《合金弹头》的I枪

沿着地面向前直线移动的飞弹,命中第一个敌人后销毁。

【14】直线贯通真实碰撞地面飞弹

代表单位:《星际争霸2》异虫的潜伏者

沿着地面向前移动的飞弹,伤害路径上的所有敌人。

【15】直线瞬间单体必中地面飞弹

代表单位:《星际争霸2》异虫的脊针爬虫

瞬间命中锁定的目标的地面飞弹。可以表现为从地下突然钻出的攻击方式。

【16】直线瞬间单体真实碰撞地面飞弹

代表单位:???

与【5】一样,只不过换成了地面飞弹。目前没有想到哪个游戏有类似的飞弹。

【17】直线瞬间贯通地面飞弹

代表单位:《DOTA2》撼地神牛的Q,《拳皇》大门五郎的地雷震

【18】追踪单体必中地面飞弹

代表单位:《英雄联盟》中熔岩巨兽的Q,《魔兽争霸3》穴居恶魔的普通攻击

一个在地上滚的飞弹,而且还制导!可以表现为树根、藤蔓一类有生命的飞弹。

【19】追踪单体真实碰撞地面飞弹

代表单位:???

可以表现为不断陷落的地面或蔓延的熔岩,所到之处无所幸免。目前没有想到哪个游戏有类似的飞弹。

=============================================================

【20】直线对地攻击飞弹

代表单位:《海岛奇兵》的重机枪

与【11】类似,飞弹不与单位碰撞,而是轰击指定地点,并且造成单体或范围伤害。与【11】的区别是飞弹以直线的方式运动,而不是抛物线。

实际上飞弹还可以有更复杂的运动规则,如《星际争霸2》中某些英雄单位的火箭弹幕技能,飞弹飞起来非常好看,但由于实际机制和【11】、【21】没有区别,所以不做赘述。

【21】对地瞬间攻击飞弹

代表单位:《战争机器》的曙光之锤,《命令与征服》的粒子炮

从高空召唤一道光柱轰击地面。实际上的逻辑是瞬间对目标点造成的单体或范围伤害,用【1】或者【4】都可以改出来,但由于理论上飞弹是从天而降的,因此不受【1】或者【4】的碰撞条件制约,可以跨越地形。从另一个角度考虑,这又是一种射线,但并不是从单位射出而是从天空中轰击地面的射线。

同理这个也可以改成由地面向天空发射的射线。

【21】型之所以特殊,是因为飞弹并非从发射者发出,而是直接在目标点产生一个效果——有些类似于《英雄联盟》死歌的Q。

=============================================================

以上就是全部的AT君弹道学手册的内容了,受到启发了吗?很多飞弹的效果其实都是可以融合的,比如《暗黑破坏神3》的恶魔猎人集束箭,是一个【20】型的对地攻击飞弹命中后再发射一堆弹跳的【11】型抛物线对地攻击飞弹。总结一下,飞弹大概有以下几方面的属性,仅供参考:

  • 运动起点:从发射者发射,还是从目标点发射(如【20】型飞弹就是从目标点直接发射的)?
  • 运动方式:直线,追踪,抛物线,瞬间,还是其他更奇葩的运动规则?否会受到地形或其他障碍物的阻挡?
  • 运动终点:某个指定的地点,还是某个特定的单位?
  • 命中敌人:命中所有发生碰撞的单位,还是仅命中锁定为攻击目标单位,还是不会碰撞任何单位(比如很多塔防中以自身为中心进行范围伤害的塔)?
  • 销毁规则:命中敌人,到达地点,生存时间,飞行速度,飞行距离,飞出屏幕?(可以是复选的哦!)