从早期的2D太空战斗游戏《太空战争》到如今种类繁多、高度逼真的3D射击游戏,射击作为游戏中不可或缺的要素已经存在了六十年。如今,射击游戏依然备受玩家喜爱,涌现出了以《战地》系列和《反恐精英》为代表的独具特色的游戏。在这个特殊的时刻,我们迎来了CS2的开服,而一代传奇游戏《反恐精英:全球攻势》也随之落幕。接下来,让我们来了解游戏中角色如何开枪。大家好,我是老Z船长,今天来跟大家探讨游戏中角色如何开枪。要回答这个问题,我们需要先理清角色和枪的关系。
在大多数游戏中,角色和枪是两个独立、但又相互关联的个体。尤其是那些可以将枪抛出去的游戏,比如《战区》和《绝地求生》等,枪的属性和数据几乎都写在枪本身上。此外,玩家身上通常还会挂载一个专门处理开枪的模块。当玩家获得一把枪时,无论是捡来的还是开局直接赋予的,开枪模块会与枪支进行数据互通。此时,需要分清楚开枪这个实际操作的功能是写在玩家角色上还是枪上。如果是写在玩家角色上的,那么枪只是一个数据存储器,用于存储伤害、子弹数量等数据。
当玩家按下左键时,开枪模块会读取枪上的数据,判断是否可以开枪。如果可以,就会播放开枪动画,生成一颗子弹并在游戏世界中发射出去。如果是写在枪上面的,那么玩家角色想要开枪,就需要先通知枪,枪再检查是否可以开枪。如果可以,就会通知玩家角色播放开枪动画,同时生成一颗子弹发射出去。两种写法并没有优劣之分,但是后者的适应性更广,比如在《战区》中,全自动武器、三连发武器和滋崩弓四类武器都需要分别处理开枪逻辑。如果将所有的开枪逻辑都写在玩家角色身上,会导致玩家角色代码过于复杂,但是如果写在枪上面,玩家角色只需要通知武器开枪,具体怎么开枪让武器自己决定。
说完角色与枪分离的,再来看看角色与枪一体的,比如《虚幻争霸》和《守望先锋》等游戏。这类游戏的特点是玩家角色的骨骼和武器骨骼是一体的。角色的骨骼动画同时包含了武器的动画。
不过,这种设计也有一个明显的缺点,那就是每个角色几乎只能使用自己的专武。这时可能会有人说不对,守望先锋的托比昂不是同时有锤子和枪两把武器吗?是的,角色枪支一体的骨骼设计天生不适合多武器,但并不是只能支持单个武器。比如在《虚幻争霸》中,贝莉卡的武器看似只有她的冲锋枪,但是我们调整一下骨骼就可以看到她的另一把武器了。
这种设计的武器专一性太强,不同角色的武器之间无法交换,因此开枪的函数只能写在玩家角色身上,因为实际上并没有所谓的武器。玩家所持有的武器就是他们本身。在角色创建时,射速、伤害等属性就已被赋予。玩家只需调用自身负责开火的功能,生成子弹并播放相应的动画,即可开枪。
我们已经了解了玩家角色和武器之间的关系,现在让我们看看玩家发射的子弹。通常,玩家发射的位置可以是枪口、瞄准镜、眼睛等。如果是第三人称游戏,可能是从屏幕中心射出。
玩家发射的子弹分为两种:射线弹和实体弹。射线弹会向目标点发射一条射线,检测路径上是否有物体阻挡。如果有,则判定命中,整个过程在游戏中是瞬间完成的,不会生成具体的子弹。因此,射线弹适合小场景的射击游戏。实体弹会生成一枚具体的子弹。UP主自制的《玻璃人战争》游戏中,角色开枪时,会在枪口生成一个子弹。该子弹具有自己的初速度,在飞行过程中会判断是否命中物体。大多数使用实体弹的游戏除了模拟子弹飞行时间,还会考虑外界因素,例如重力和风向,以增强现实感。
单机游戏和网络游戏玩家开枪的过程不同。在单机游戏中,玩家可以直接生成子弹。
在网络游戏中,玩家开枪的情况需要具体分析。以使用实体弹的游戏为例,由于射击游戏中的伤害触发需要子弹具有碰撞,因此我们可以根据子弹是否具有碰撞来判断是否能够触发伤害机制。有些游戏会在玩家开枪时,在本地客户端生成一个没有碰撞的子弹。然后,客户端通知服务器生成一颗具有碰撞的子弹,并通知其他客户端生成一颗没有碰撞的子弹。这样,玩家发射的子弹将由服务器检测碰撞。这种设计可以更好地防止作弊,因为它可以检测玩家是否修改了子弹数据。其他玩家看到的子弹位置可能不同,但这种设计不适合延迟高的游戏。如果延迟过高,当玩家开枪时,本地客户端已经生成了子弹,但服务器需要200毫秒左右的时间才能生成子弹,此时子弹的位置可能会出现严重偏移。如果你玩的游戏经常出现明明自己看到炮弹打中了车屁股,但敌人却没有受伤的情况,那么很可能是这种情况。
一些游戏针对上述情况进行了改进。在玩家开枪时,客户端和服务端都会生成具有碰撞的子弹,而其他客户端只会生成没有碰撞的子弹。当玩家客户端的子弹命中目标时,服务器的子弹没有命中时,服务器会结合延迟通过官方算法来判断误差是否在可接受范围内。如果可以接受,就使用本地玩家的命中数据;如果不可以,就使用服务器端数据。
现在很多软件都采用前后端分离的设计,游戏也不例外。有些射击游戏的服务器只是单纯的数据接收和分发器。当玩家开枪时,玩家本地会生成具有碰撞的子弹。其他客户端生成无碰撞的子弹,当玩家本地命中目标时,本地客户端会将命中数据上传服务器。服务器并不判断子弹是否真的可以命中。
这种设计的优点是延迟对玩家影响很小。因为玩家射击的都是客户端本地的代理角色,即使延迟达到200毫秒,也不会影响射击的手感。但缺点是客户端权力过大。如果恶意玩家使用作弊软件修改子弹数据,服务器很难阻止这些玩家。
最后,如果是网络游戏玩家使用枪等发射器,就不得不提到延迟补偿。但由于篇幅所限,延迟补偿是什么?如何实现?请期待老Z船长的游戏实现延迟补偿时再为大家详细讲解。请点赞支持,谢谢!
Copyright © 2024 妖气游戏网 www.17u1u.com All Rights Reserved