导弹是机甲游戏中常见的武器种类,导弹弹幕形成“坂野马戏”的表现形式也被机甲迷们所津津乐道。
《纯白星原》中的坂野马戏:
导弹运动算法的设计思路
那么如何在游戏中设计出“坂野马戏”的视觉效果呢(纯动画绘制不做讨论,只考虑用算法实现)。下面分享一下我在《纯白星原》中导弹运动算法的设计思路。
先看一下最简单的飞弹模型:
弹体始终以一定速率转动指向目标位置,同时按照既定速度向当前指向运动,最终形成追踪目标的效果。
这种方式有两个明显的缺陷:
1、在一定速度,角度和位置参数匹配下,飞弹会绕着目标转动无法命中目标,就像“放卫星”。
2、多枚飞弹追踪同一目标时,不管这些导弹的初始位置如何,追久了这些飞弹都会最终汇聚到统一或近似的弹道里去。
为了解决以上缺陷,往往需要给导弹的运动增加一些随机的摆动。为了让这种随机摆动更加自然和合理我是这样做的:
导弹并不是始终转向目标,如果目标在导弹正前方一定角度范围外,导弹才会按照一定角速度转向目标。直到目标处于导弹正前方一定角度范围内,这时导弹将无视目标的相对角度而是延续并逐渐减小之前的角度转向。这样用不了多久导弹的指向就会在另外一侧偏出,这时又会启动相反的转向过程。这样导弹就会在目标的大致方向上来回修正角度产生波浪形前进的形态。
然后用随机参数控制一下视角内时转向速率衰减的幅度每个飞弹的轨迹就区分出来了。另外在一些随机时间点给飞弹的运动状态随机改动一下产生“大跳”的效果。多枚导弹的随机波浪形前进就形成了“坂野马戏”。
为了让飞弹以一定的命中概率和回避难度命中目标,在飞弹很接近目标时再另外设计制导策略,比如为了产生飞弹擦弹和诱爆的效果做一些飞弹“发呆”“转动硬直”之类的设计。
实际效果
更多游戏实际效果:
如果您有什么其他设计思路和想法,欢迎留言分享。
相关链接
作者:phiXcat (B 站)
我很喜欢,但是不知道红色警戒的导弹系统是如何设计的?感觉有共同的原理。
@陈康:红色警戒是简单的追踪,没有作者这样加入随机摆动。
@anhanjinj:好的.我记下了.
作者所说的缺陷1我觉得并不存在,如果导弹有那么大的转向早在错过目标之前就应该进行转向修正。
最近由 qf 修改于:2019-09-18 16:30:00而2的缺陷我觉得也不是缺陷,这正是躲避导弹的一种手段。如果加了作者的处理,导弹转向的幅度大就丑,幅度小也无法发现。
再结合纯白星原的游戏视角,坂野马戏也无从表现。我觉得需要向GTA里那种电影镜头才能把这种坂野马戏表现出来,而那种镜头又不太适合角色操作。
@qf:1的情况确实存在,需要一定的速度和角速度匹配,以及目标的相对位置和相对速度的匹配情况。这在高速战斗中很容易发生。在写实的现代空战中导弹速度和加速性是远大于目标存在不可逃逸区。是不会出现这种情况的。
2对于马戏来说是巨大缺陷啊,导弹归化到单一的轨迹上还叫什么马戏,马戏就是需要制造弹道差异化啊。不规律的运动显得更有灵性,而非机械,这是马戏的灵魂。
至于命中和回避的平衡,是可以通过单独的末段制导算法实现的。同样发射阶段通过独立的初始运动算法来产生各种各样的发射形式。而马戏算法只用与赶路接近目标。
另外我这只是一种思路,实际代码写的也比较臃肿,基本上是当怪物AI来写了。肯定还有其他的方案满足不同需求。
坂野马戏,今天突然想找这个词终于找到了当年看过的文章!