游戏中子弹的工作原理
副标题[/!--empirenews.page--] 导语:自1992年《沃芬斯坦3D》大爆发以来,第一人称射击(FPS)游戏便一直是电子游戏产业的主要产品。从那以后,随着图像升级、巨额预算和电子竞技生态系统的发展,这一类型游戏也在不断演变。但它的核心——射击机制呢?我们在这方面进展如何?为什么有些枪让人 ![]() 自1992年《沃芬斯坦3D》大爆发以来,第一人称射击(FPS)游戏便一直是电子游戏产业的主要产品。从那以后,随着图像升级、巨额预算和电子竞技生态系统的发展,这一类型游戏也在不断演变。但它的核心——射击机制呢?我们在这方面进展如何?为什么有些枪让人觉得是真的,而有些人觉得是玩具? Hitscan 早期时候,许多游戏都依赖于一种叫做raycasting的技术去将3D环境呈现到2D图像(即屏幕)上。Raycasting还允许引擎确定射线相交的第一个对象。开发人员随后开始思考,“如果那道光线来自于模拟子弹的枪口呢?”有了这个想法后,hitscan便诞生了。 ![]() raycasting的一个示例 在大多数基于hitscan的武器实现中,当玩家射击一颗子弹时,物理引擎会: 找出枪指着的方向。 从枪口射出一束光线,直到一定范围内。 使用raycasting来确定光线是否击中了一个物体。 如果引擎确定某个物体在火线内,它会用一条消息通知该物体被子弹“击中”。然后目标可以做所有需要的计算来记录伤害。 ![]() unity的一个示例,点A表示枪发射射线直到其最大点B。射线与立方体接触,引擎会告诉它已经被击中 Hitscan本质上很简单,但是可以做很多不同的修改来支持其他逻辑: 如果我们让射线穿过它击中的第一个物体,我们就可以穿透同一条线上的多个物体,就像《雷神之锤》中的轨道炮一样。 移除射线的最大范围意味着我们可以发射出一束激光,它会一直持续到我们击中某物为止。 把某些表面设计成反光的,能把子弹弹回来。 使用raycasting的主要优点是它非常快。它计算速度快,不需要额外的内存或处理时间来构建新的物理对象。这意味着保持多客户端同步所需的网络通信是最少的,因为服务器只需要跟踪射线的方向。后座力很容易添加,因为添加一个小扰动的目的,枪将模拟的效果。 因此,许多游戏使用hitscan作为射击逻辑也就不足为奇了。《沃尔芬斯坦3D》和《毁灭战士》都是经典的例子,但即使是最近的游戏也使用了这种技术。像《守望先锋》中的76号士兵、麦克里和Widowmaker等角色都拥有hitscan武器,而《使命召唤》中的大多数武器也是hitscan。 ![]() *《守望先锋》,源氏偏转是反射表面的一个例子。 ![]() ![]() ![]() 那么为什么不是所有的游戏都使用这种方法呢? 首先,你可能已经注意到射线有一个无限的移动速度,因此立即到达目的地。当你射出一颗子弹并击中一个物体后,就没有时间旅行了。这意味着如果一束射线正对目标,即使目标在几英里之外,也不可能躲避子弹。 其次,hitscan的大多数实现都使用直线射线。这意味着很难添加风、重力和其他可能影响子弹离开枪膛的外部因素。程序员可以向射线添加扭结和弯曲来帮助它模拟真实的回合,但是一旦玩家射出射线,就没有真正的方法去修改射线的中间路径。 ![]() 许多“休闲”游戏最终都使用了hitscan方法,因为它简化了大多数新手的学习曲线。但是那些旨在创造一种“身临其境和真实的”射击体验的游戏呢?他们无法在这些限制内实现其目标,因此我们需要另一种方法。 弹射弹道(Projectile Ballistics) 这听起来很神奇,但高层次的想法很简单:从武器中射出的每一颗子弹或射弹都会在环境中产生一个新的物理对象。它有自己的质量,速度,和hitbox,引擎将跟踪这个新对象。 ![]() 在现实主义至上的游戏中,使用弹射弹道的优势会让你的游戏大放异彩。由于每个抛射体都是独立存在的,你现在可以把风、摩擦、重力、温度等因素考虑进去,以及其它任何可以作用在子弹上的力。现在你可以改变物理,玩家可以使用武器而不是简单的枪和激光;你现在可以添加手榴弹和火箭到你的军火库。 由于这个系统下的子弹不会以光速移动,你也可以实现时间特性: “子弹时间”是可行的。 子弹的飞行时间,这意味着如果你要进行长距离射击(或射击一个缓慢移动的子弹),瞄准前方变得至关重要。 延迟爆炸的炮弹,如手榴弹。 有了这些额外的计算,与使用hitscan相比,处理更加费力。服务器将不得不做更多的工作来确保所有对象是同步的,客户端之间的逻辑差异或冲突必须得到解决,否则同一服务器上的玩家将有不一致的游戏体验。 ![]() ![]() ![]() (编辑:二游网_173173游戏网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |