T3瞄准机制详解(2)(关于瞄准和射击的底层逻辑)
接上文
所以,为什么会能够卡墙角射击呢?
这时,我们需要了解一个3D编程中的模块,叫做:
Raycast
(翻译成中文是光线检测)
这个情况下此模块的大致作用就是,从指定视角的屏幕上直线向前射出一道射线,并且能够检测到这一条射线碰撞到的物体。检测到的信息包括第一个碰到的实体,目标的标签(地面,敌人,队友什么的),碰撞的坐标等。整个过程一般会在一帧(0.02秒左右)完成。
所以,在T3里,子弹在射击是飞向玩家射击的瞬间,从屏幕正中间(也就是准星位置)射出的光线检测,碰撞到的第一个坐标,而不是画面中枪口朝向的位置。
那为什么要使用这种瞄准机制呢?
众所周知,TPS全称为Third Person Shooter,即第三人称射击。既然是第三人称而不是第一人称了,那玩家看到的(第三人称)并不是角色看到的(第一人称)。所以,除非确定玩家想要瞄准的坐标而不是方向,角色并不知道究竟要往哪里射击。
只有通过玩家视角准星光线检测到的坐标来确定角色的射击方向才是最靠谱也是最好的做法。(当然以后就说不定了)否则玩家瞄准和角色射击有偏差则会大幅度影响玩家手感。(不过能够向后射击可能真只是一个忘了优化代码导致的bug而不是官方特意做的)
光线检测的子弹的碰撞
看到这里,虽然有人可能忘了,但是相信还是会有人问:就算瞄准是这样,但是子弹也不应该穿墙啊?因为避免穿墙就只需要给子弹加一个碰到墙体就消失的脚本就行了。
这又涉及到射击的底层逻辑了。
其实,在T3的所有光线检测的射击里(不包括大型子弹),射击造成伤害的并不是子弹,而是瞄准和射击本身。
这时有人会问:但是伤害命中提示是在子弹飞行后命中敌人才出现的啊?
实话实说:这个子弹碰撞的效果是骗人的。
如果是攻击移动的目标,你会发现如果你使用常规枪械预判了敌人的位置,反而不会造成任何伤害。
(子弹看上去应该命中但没有造成伤害)
但是如果你只是单纯的瞄准敌人当前的位置射击,就算子弹到达时敌人已经离开了,还是会造成伤害。
(视频中其实准星在维克多头上时就射击了,只是射击动画看起来有一点内置的延迟)
综上所述,可以得出结论:
常规子弹不会碰撞,只会根据射击时光线检测得出的路径以自身的弹速飞行,期间无视任何碰撞,并在到达终点时对射击时瞄准到的敌人造成伤害,无论目标在哪。
这样的设计有可能是为了减少玩家的瞄准负担,也是为了响应“瞄到的就是打到的”,或者只是单纯的因为子弹移速极快所以不愿意考虑太多预判。
忘了说这事了,多谢提醒
另外这个现象在用钟艾莉时也非常常见。如果你在冲刺前被敌人瞄准射击并且射击伤害能够致死,你冲刺后还是躲不开这个伤害,并且有时死亡时会回到冲刺前的位置。这个看起来像个bug但其实是正常游戏机制。
这时,似乎又回到了最开始的问题:为什么花翎的子弹看起来也很小,但是无法向上面的角色那样卡墙角射击?
让我们下一期讲解游戏中的第二种瞄准和射击方式
连接集合: