导弹是机甲游戏中常见的武器种类,导弹弹幕形成“坂野马戏”的表现形式也被机甲迷们所津津乐道。
《纯白星原》中的坂野马戏:
那么如何在游戏中设计出“坂野马戏”的视觉效果呢(纯动画绘制不做讨论,只考虑用算法实现)。下面分享一下我在《纯白星原》中导弹运动算法的设计思路。
先看一下最简单的飞弹模型:
弹体始终以一定速率转动指向目标位置,同时按照既定速度向当前指向运动,最终形成追踪目标的效果。
这种方式有两个明显的缺陷:
1在一定速度,角度和位置参数匹配下,飞弹会绕着目标转动无法命中目标,就像“放卫星”。
2多枚飞弹追踪同一目标时,不管这些导弹的初始位置如何,追久了这些飞弹都会最终汇聚到统一或近似的弹道里去。
为了解决以上缺陷,往往需要给导弹的运动增加一些随机的摆动。为了让这种随机摆动更加自然和合理我是这样做的:
导弹并不是始终转向目标,如果目标在导弹正前方一定角度范围外,导弹才会按照一定角速度转向目标。直到目标处于导弹正前方一定角度范围内,这时导弹将无视目标的相对角度而是延续并逐渐减小之前的角度转向。这样用不了多久导弹的指向就会在另外一侧偏出,这时又会启动相反的转向过程。这样导弹就会在目标的大致方向上来回修正角度产生波浪形前进的形态。
然后用随机参数控制一下视角内时转向速率衰减的幅度每个飞弹的轨迹就区分出来了。另外在一些随机时间点给飞弹的运动状态随机改动一下产生“大跳”的效果。多枚导弹的随机波浪形前进就形成了“坂野马戏”。
为了让飞弹以一定的命中概率和回避难度命中目标,在飞弹很接近目标时再另外设计制导策略,比如为了产生飞弹擦弹和诱爆的效果做一些飞弹“发呆”“转动硬直”之类的设计。
更多游戏实际效果:
https://www.bilibili.com/video/av34087097
https://www.bilibili.com/video/av49506996
https://www.bilibili.com/video/av56903234
https://www.bilibili.com/video/av22035000
Steam链接: https://store.steampowered.com/app/864430/SilverFrame/
如果您有什么其他设计思路和想法,欢迎留言分享。
作者:phiXcat
https://www.bilibili.com/read/cv3490617
出处: bilibili
暂无关于此日志的评论。