枪界吧 关注:5,736贴子:58,438
  • 12回复贴,共1

【转】后坐力在游戏中的表现

只看楼主收藏回复

武器后坐力机制算是比较深入的科普, 涉及到大量数学知识和公式, 本来不怎么想写但考虑到玩家们还是很喜欢indepth的知识的所以就发出来了. 其中图片使用XboxAhoy武器知识视频中的截图。
  为了方便理解和保密性质的原因, 帖子内的算法用作演示和测试, 无法直接套用到游戏中去。
  Recoil这很好理解, 就是玩家在玩FPS时候的所谓"后坐力". 但是这个"后坐力"的学问是很大的, 如何做的真实, 如何做的准确, 如何做的适合玩家上手都是困扰很多FPS游戏设计的一个难点.
  我们进入正题
  Recoil = "后坐力"
  在游戏中如何体现?
  #1 第一个最重要的硬数据, Spread"散布" 在游戏中散布是一个硬数据, 也就是说他的数据是定死的(但他是个变量, 不好理解的话可以理解成一个范围值但这个范围值是定死.), 在COD中武器有两种击发方式, HIP(扫射)和ADS(瞄准), 但是在COD中"散布"只对扫射情况下有效. 在ADS的情况下武器实际上是没有散布的. 那么为什么在游戏的时候武器瞄准打在枪上的时候不是也有散布么? 其实是GunKick和ViewKick的产生了作用.

#2 Gun 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的武器平衡是有多么的难调整和复杂了, 武器越多越烦人, 需要调整的时间越长。


1楼2019-08-24 00:39回复
    不太理解,不过能明白你的意思,就是要表达武器手感调整这一块比较复杂,你们又是第一次自己来做射击游戏,想要调整到最好需要时间。这些知识太专业了,不过我想说的最好能调整一些蹩脚的设定,


    白银星玩家
    百度星玩家累积成长值为1,去领取
    活动截止:2100-01-01
    去徽章馆》
    IP属地:河北来自Android客户端2楼2019-08-24 07:39
    收起回复
      臂力


      IP属地:浙江来自Android客户端3楼2019-08-24 07:48
      回复
        射速越快,动能积累越多,枪口恢复越慢,主要看枪口制退和导气原理及装药量


        IP属地:浙江来自Android客户端4楼2019-08-24 07:50
        收起回复
          我理解为枪界要调整手感了


          IP属地:上海来自iPhone客户端9楼2019-08-26 23:28
          收起回复
            还有用数学公式算后坐力的?直接进游戏在墙上扫一梭子,反方向压就行,没必要这么认真。以前我看一个大佬段位很高,但压枪也不是很好,只会蹲,但他爆头率很高。fps游戏最重要的还是预瞄,不是每个人都是gtr那样的recoil master。


            11楼2020-04-30 17:56
            回复