在上一篇文章中,小编为您详细介绍了关于《Unity推出业内首款智能化AR创作工具MARS》相关知识。本篇中小编将再为您讲解标题射击游戏里的子弹是如何飞行的。
从第一款FPS游戏《德军总部3D》出现以来,这种类型的游戏广受好评,创新的玩法也层出不穷,比如“吃鸡”。![]() △ 第一款FPS游戏《德军总部3D》 但是你知道游戏里的子弹是怎么飞行的吗? 早期,它和现实世界中的子弹完全不一样,很多玩家合理地利用了这个bug,比如CS里的甩狙。 随着PC运算能力的提高,子弹的算法也在不断进步,弹道的效果越来越真实。 最近一位软件工程师Tristan Jung在游戏论坛上总结了FPS游戏的一些子弹轨迹算法。让我们一起来看看FPS游戏这二十多年来发生的变化。 挡住射线的都会死 早期的FPS游戏都采用一种“光线投射”(ray casting)的技术,用枪口发射出去的射线来确定子弹的轨迹。光线投射可以确定与光线相交的第一个对象。 ![]() 在FPS里,这种算法叫做“命中扫描”(hitscan),当你扣下扳机时,物理引擎会计算下面几件事: 枪口所指的方向; 从枪口射出一束射线,直到达到规定的范围,比如碰到墙; 确定光线投射的路径上是否光线是否撞击物体。 如果引擎发现你有物体挡住了子弹的路径,就是通知系统该物体被击中。 ![]() △ 方块挡在了子弹A射向B的路径,引擎告知方块已被击中 hitscan的核心很简单,至于物体被子弹击中后的下一步逻辑是什么,可以根据游戏要求定义: 1、如果允许子弹穿透,那么它将穿透路线上的所有物体; 2、消除最大的射线范围,就可以一直发射出激光,直到命中物体为止; 3、将某些表面设置为具有反射性,可以将子弹弹开。 使用hitscan算法,最大的好处是计算简单快速,不需要额外的内存或处理时间即可构建新的物理对象。这也意味着在多人游戏时,所需的网络资源也最少。 因此,行业中的许多游戏都将hitscan用作射击算法也就不足为奇了。 不仅《德军总部3D》和《毁灭战士》这些经典游戏采用,连近年来的一些热门游戏也是。比如《守望先锋》、《使命召唤》里的一些武器即是采用hitscan算法。 ![]() 但是hitscan还是存在着一些缺陷。 首先,子弹的速度是无限的,比光速还快,瞬间到达被击中的物体。即使你离目标很远,只要你开枪的一瞬间,对手在准星上,就必死无疑。 ![]() △ 扣动扳机和目标上的火光同时出现,说明子弹是瞬间击中 其次,子弹的路径是直线,没有考虑风向、重力等因素,即使在建模的时候把路径改成曲线,但是在子弹射出后也无法更改路径。 为了让射击游戏更真实,就需要使用另一种方法。 给子弹加上弹道 这个算法听起来很花哨,其实很简单。 武器射出的每颗子弹,都会在环境中创建一个新的物理对象,有着自己的质量、速度和引擎要计算的命中框。 由于每个弹丸都是独立存在的,因此可以考虑风力、摩擦、重力和温度等因素。任何作用在子弹上的力都会改变其方向。 ![]() 而且在这种算法下,子弹不会瞬间移动,还可以实现以下功能: 1、在一些游戏中有“子弹时间”特效; 2、如果长距离狙击移动目标,需要提前目标的估计移动量; 3、实现榴弹等爆炸物的延迟爆炸。 ![]() 但是在进行多人游戏时,服务器将需要做更多的计算,来确保所有对象都同步,并且必须解决不同客玩家之间的差异或冲突,以免在同一台服务器上给玩家带来不一致的体验。 一个方法是,在游戏时间之前加载对象的“池”,并在需要时“弯曲并启用”它们。一旦撞击到物体表面,就回收这个对象,将其保存以备后用。 这种方法将减少反复创建和销毁对象的计算和内存成本。 至于游戏时间的同步,存在着多种计算方法: 1、时间是与渲染分开计算,即使存在跳帧,游戏也能精确地表示对象。这种方法需要计算自上次渲染之后经过的确切时间。 2、计算每一帧的时间,将物理引擎绑定到帧速率。如果禁用帧速率上限,或开始丢帧,则会看到加速或卡顿的效果。 ![]() 而且,这种算法在子弹速度足够快时,可能会遇到对象彼此“互穿”的情况,尽管它们在引擎中从未重叠。 混合系统 有没有办法结合了以上两种方法的优点呢?答案是有的。 最简单的办法就是不同武器使用不同的引擎。 大多数FPS游戏引擎可以处理两种类型的子弹模拟。这样就可以选择拥有各种各样的武器。《侠盗猎车手》和《半条命》等游戏都具有可以支持两种物理类型的武器。 比如《光环》中的突击步枪使用命中扫描引擎,而刺针枪使用子弹弹道模型。 ![]() 游戏开发人员还可以混合使用两种技术来弥补每个系统的弱点,从而提供更加逼真的体验。 例如,要解决物体从弹道互穿的问题,可以在引擎的每个时刻上绘制子弹射线,查看射线是否会相交。 也可以混合两种算法以增强游戏的功能。 《狙击精英》系列就是一个很好的例子。扣动扳机后,引擎将使用hitscan来确定子弹是否足够靠近目标以触发慢动作。如果结果为true,引擎将在子弹时间内计算弹道。 ![]() 参考链接: https://www.gamasutra.com/blogs/TristanJung/20191206/355250/How_Do_Bullets_Work_in_Video_Games.php 来源:量子位 原地址:https://www.toutiao.com/a6822865446291636747/ |
编后语:关于《射击游戏里的子弹是如何飞行的》关于知识就介绍到这里,希望本站内容能让您有所收获,如有疑问可跟帖留言,值班小编第一时间回复。 下一篇内容是有关《命令与征服重制版由哪些成就 全成就及完成方法一览》,感兴趣的同学可以点击进去看看。
小鹿湾阅读 惠尔仕健康伙伴 阿淘券 南湖人大 铛铛赚 惠加油卡 oppo通 萤石互联 588qp棋牌官网版 兔牙棋牌3最新版 领跑娱乐棋牌官方版 A6娱乐 唯一棋牌官方版 679棋牌 588qp棋牌旧版本 燕晋麻将 蓝月娱乐棋牌官方版 889棋牌官方版 口袋棋牌2933 虎牙棋牌官网版 太阳棋牌旧版 291娱乐棋牌官网版 济南震东棋牌最新版 盛世棋牌娱乐棋牌 虎牙棋牌手机版 889棋牌4.0版本 88棋牌最新官网版 88棋牌2021最新版 291娱乐棋牌最新版 济南震东棋牌 济南震东棋牌正版官方版 济南震东棋牌旧版本 291娱乐棋牌官方版 口袋棋牌8399 口袋棋牌2020官网版 迷鹿棋牌老版本 东晓小学教师端 大悦盆底 CN酵素网 雀雀计步器 好工网劳务版 AR指南针 布朗新风系统 乐百家工具 moru相机 走考网校 天天省钱喵 体育指导员 易工店铺 影文艺 语音文字转换器