游戏之家 > 游戏库

《使命召唤OL》武器后坐力机制

使命召唤OL中武器的后坐力是大家议论纷纷的问题,今天有玩家就带来了一篇关于使命召唤系列中,武器后坐力机制以及运算方法的文章,可以算是比较深入的科普, 涉及到大量数学知识和公式, 是高端玩家了解游戏必备只一,下面我们就一起来看看吧。

为了方便理解和保密性质的原因, 帖子内的算法用作演示和测试, 无法直接套用到游戏中去,

Recoil这很好理解, 就是玩家在玩FPS时候的所谓"后坐力". 但是这个"后坐力"的学问是很大的, 如何做的真实, 如何做的准确, 如何做的适合玩家上手都是困扰很多FPS游戏设计的一个难点.

Recoil = "后坐力"在游戏中如何体现呢?

1、Spread"散布"

在游戏中散布是一个硬数据, 也就是说他的数据是定死的(但他是个变量, 不好理解的话可以理解成一个范围值但这个范围值是定死.), 在COD中武器有两种击发方式, HIP(扫射)和ADS(瞄准), 但是在COD中"散布"只对扫射情况下有效. 在ADS的情况下武器实际上是没有散布的. 那么为什么在游戏的时候武器瞄准打在枪上的时候不是也有散布么? 其实是GunKick和ViewKick的产生了作用.

2、Gun Kick (枪口跳动)

就是当武器击发时, 武器会随着击发而在屏幕上左右上下的晃动. 同时这个晃动是有相互作用的, 枪口向左跳的同时武器也会回到中心点, 如果连续击发那么下一次的跳动就是向右, 同时武器在停止击发的时候不管怎么样他都会回到中心点, 这个回复的速度称之为回归原点速度, 速度越快回到原点的速度越快,武器精度就大大提高.

3、View Kick (视野跳动)

这是最容易被混淆的机制, 视野跳动是武器在击发时, 武器会跳动离开武器瞄准的原点, 他会跳动上下左右的任意方向, 实际上这个机制是屏幕在调准视角而不是武器的模组在跳动. 这个跳动可以通过玩家的操控来控制也就是玩家所称的"压枪".

ViewKick移动视野和GunKick移动模组是两个模块最大的不同.

4、Visual Recoil (效果跳动)

这只是游戏武器的动画模拟, 没有实际的数据所以不直接影响武器的"后坐力", 这是一个提高武器真实度的表现手法, 这就是为什么当你感觉武器在跳动时打不中敌人, 想修正弹道但是怎么都打不中的原因,实际上你是打中了只是效果跳动给了你打不中的错觉,所以COD加入了Hitmarker来帮助玩家判定是否击中了目标.

5、Center Speed (回归原点速度)

这是非常重要的一个武器数据, 很容易理解它是当武器产生后座之后一段时间, 武器将会回归到原点的速度, 速度越快, 你武器回到原点的速度也越快, 后坐力影响也就越小.

以上是纯的理论知识, 如何运用到显示的演算中呢?

在COD MW2中 Gun Kick 和 View Kick 都独立的体现在X维度和Y维度.

Gun Kick 允许跳动在轴交叉中进行, 武器的跳动可以不需要回到原来的轴就进行下一次的跳动.

以下为演示用的值和套用的公式:

adsGunKickReducedBullets的数据是减少武器上跳速度需要的击发数, 当这个数据的击发数被程序执行的时候, 武器的上跳数据将会回到他的基本数据.当停止击发时, 程序的计时器重新开启等待下一次的击发.

adsGunKickReducedPercent的数据是当adsGunKickReducedBullets击发数据执行后有多少速度数据减少了.

adsGunKickPitchMax, adsGunKickPitchMin, adsGunKickYawMax 和 adsGunKickYawMin 是四个计算武器每次上跳时对四个方向上跳速度计算的一个数据(每秒多少度).(Pitch数据是上下的, Yaw数据是左右的, 通俗理解). 加速度是每次击发才会产生的. ViewKick在这里可以不考虑他的加速度, 这就是为什么在COD武器数据中会看到ViewKick数据为0的原因.

adsGunKickAccel 这个数据是武器回复到中心原点加速度的数据(每秒多少度). 加速度的指向永远是武器瞄准的中心原点.

adsGunKickSpeedDecay 是一个线性阻力系数按照( s^-1 1赫兹)计算. 用来衡量武器上跳衰减的偏转数据. (离开中心原点)

adsGunKickStaticDecay 是一个线性阻力系数按照( s^-1 1赫兹)计算. 用来衡量武器上跳衰减的回归到原点数据. (向原点后方移动再回到原点 re-centering).

基本上GunKick每一次上跳的数据的演算公式和算法是:

x[t] = x_0 (+/-) g*Exp[-bt]/b^2 (-/+) g/b^2 (+/-) gt/b - v*Exp[-bt]/b + v/b

t -- 武器开始上跳时过去的时间.

x_0 -- 武器开始上跳时的位置.

v -- 武器上跳的初始速度.(取决于四个方向的初速和数据)

g -- adsGunKickAccel

b -- adsGunKickSpeedDecay 或者 adsGunKickStaticDecay, 取决于武器回归中心原点的实际情况.

Exp[...] -- 指数函数e^(...)

总结:

当你研究透彻之后你会发现还是不对劲! 总觉得少了不少东西, 是为什么呢?

因为武器后坐力和手感还是需要音效和动画做补充的. 枪枪入肉的感觉可少不了音效和动画.其他完全不知道我再说什么的玩家是不是感觉什么都看不懂啊?

没关系. 你们只需要明白MP的武器平衡是有多么的难调整和复杂了, 武器越多越烦人, 需要调整的时间越长.想想COD每把枪都要调出有个性来的要求简直是残忍。