找回密码
 立即注册
查看: 401|回复: 1

Unity多人游戏开发都存在哪些误区?

[复制链接]
发表于 2022-1-18 20:29 | 显示全部楼层 |阅读模式
主要讲讲多人游戏项目开发,大家常见的一些误区吧。
其实和单人游戏相比,制作发行一款多人游戏往往需要考虑更多。最基本的实现,至少多人游戏中所有一切都必须实时同步到每位玩家的设备上,才能达到同步的游戏状态。
多人游戏开发的一个核心难题是网络代码(Netcode),即处理玩家和服务器之间“怎样”通信、通信“什么”的代码。 然而“Netcode”这个词,有一点,名字没取好(歪果仁取的,怪我咯),经常被看作是高延迟和低质量游戏体验的始作俑者。
什么是Netcode?
Netcode 指的是“制作”多人游戏的开发环节,这个术语通常用于概括游戏中处理“客户端到服务器”的联网与同步部分
在多人游戏中,服务器和客户端通过在网络上发送数据包相互通信。为了在相隔甚远的玩家之间建立起实时同步的游戏体验,类似角色移动或物体生成等游戏事件会借助数据包同步到其他客户端。这些负责在网络上发送和接收数据包的系统就是所谓的传输系统(transport)。
虽然开发者可通过调用传输系统的发送功能来手动发送数据包,但缺乏经验的开发者很容易让系统变得不堪重负。
一个 Netcode 库可借助网络变量和远程程序调用(RPC)等功能,将数据包的发送流程从游戏代码中剥离出来。
Unity 目前有两种网络代码,Netcode for GameObjects(预发布)和Netcode for Entities(实验性)。



Unity Netcode Library


  • Unity多人游戏开发Netcode误区一: “前期不用想太多,后期把游戏转为多人游戏就好了”
事实上,多人游戏的实现并不简单。如果你想在游戏中加入多人游戏,应该尽早在设计和开发中考虑妥当。
为什么呢?多人游戏几乎触及游戏玩法的每一个方面,自然也就会影响到游戏开发。例如,单人游戏里的背包系统在多人游戏里需要同步到服务器上。许多在单人游戏中做起来很简单的东西,在多人游戏里就可能没那么简单了。
你有没有想过,为什么大多数多人游戏都使用运动学(kinematic)角色控制器,而很少有物理互动?因为即使是最有经验的开发者,也很难在多台设备上应用一个共有的物理模拟或预测模拟结果。
所以建议尽早检查游戏功能是否能很好地兼容多人游戏,特别是那些在其它游戏里不太看得到的机制。



游戏开发时间线

Unity多人游戏开发Netcode误区二: “低延迟总是好的”
低延迟不一定总是意味着流畅和一致的体验。  
虽然低延迟的确能让体验更流畅,但让游戏状态保持一致也同样重要。同步游戏状态所耗费的时间较少,因而对整体体验来说几乎微不足道。
要想提高游戏的流畅性和一致性,最常用的方法是建立缓冲区。从网络传入的数据包不会被立即处理,而会被放到一个队列中。客户端会在游戏的每一个tick(即一次模拟更新)从队列中取出一个数据包(理想情况)进行处理,同时保持住缓冲区的大小。这样,服务器在每个tick发送一个数据包时,客户端也能以同样的速率处理数据包。
但为什么要这么做呢?如果客户端立即处理掉传入的数据包,不也是每个tick接收一个数据包吗?在完美的网络条件下,这是对的,但在网络上传输的数据包一定会有或长或短的传输延迟。
每个数据包的往返时间(RTT)会存在着上下波动,这通常被称为抖动(jitter)。缓冲是一种提高延迟、减少抖动的方法,缓冲后的游戏往往有着更高的一致性,玩家体验也更好。


许多格斗游戏大多带有快速连按才能放出的招式,玩家一般会通过肌肉记忆来学习这些招式。要让游戏更为公平,很重要的一点是让角色行动与玩家输入达成一致。 那大多数格斗游戏是如何实现这种一致性的呢?他们以固定的频率来记录玩家输入,然后将输入缓存一小段时间,这样一来,玩家的输入便能一致地反映到游戏的帧上,平均的输入延迟会增加,但游戏也会变得更为一致。
虽然更大的缓冲区能让游戏更流畅,但过多的延迟经常会让玩家感到输入与游戏脱节。目前市面上有多种技术可用于稳定缓冲区、降低延迟的影响。客户端权威的游戏能将本地的输入立即应用到玩家角色上,做到延迟最小化。其他玩家则可以在缓冲区中储存敌对玩家的数据,让对方的表现更流畅。 虽然这种方法对玩家来说往往感觉很好,但它也可能导致作弊等其他问题。
因此竞技游戏可以使用一种叫做客户端预测的技术。本地玩家的输入会被立即应用,而服务器则会根据这些输入来预测玩家的行动,然后检查客户端是否执行了预测的动作,在必要时进行纠正。
Unity多人游戏开发Netcode误区三:“带宽是免费的”
为什么会有这样的误区呢?是因为与商用服务器相比,个人宽带的价格非常便宜(因为大部分个人用户的带宽用量和使用时长都比较少)。商用服务器就非常不一样了。它们通常一天到晚都在运行,游戏的服务器经常需要处理数百名玩家的通信,会按每千兆字节收费。
这也意味着降低带宽是节省运营成本的关键。并且,对带宽需求较低的游戏可让网速较慢的玩家也能很好地享受游戏。
多人游戏卡顿的一个原因是用户自己的网络拥堵。这种情况由于网络直播等大流量内容的火热而变得更为常见,降低游戏的带宽需求于是就更能改善玩家体验。
相比单人游戏,开发一款多人游戏难度系数还是不在一个等级的,部分初期可能会遇到的误区列出来,希望能帮大家避坑。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
发表于 2022-1-18 20:32 | 显示全部楼层
主要讲讲多人游戏项目开发,大家常见的一些误区吧。
其实和单人游戏相比,制作发行一款多人游戏往往需要考虑更多。最基本的实现,至少多人游戏中所有一切都必须实时同步到每位玩家的设备上,才能达到同步的游戏状态。
多人游戏开发的一个核心难题是网络代码(Netcode),即处理玩家和服务器之间“怎样”通信、通信“什么”的代码。 然而“Netcode”这个词,有一点,名字没取好(歪果仁取的,怪我咯),经常被看作是高延迟和低质量游戏体验的始作俑者。
什么是Netcode?
Netcode 指的是“制作”多人游戏的开发环节,这个术语通常用于概括游戏中处理“客户端到服务器”的联网与同步部分
在多人游戏中,服务器和客户端通过在网络上发送数据包相互通信。为了在相隔甚远的玩家之间建立起实时同步的游戏体验,类似角色移动或物体生成等游戏事件会借助数据包同步到其他客户端。这些负责在网络上发送和接收数据包的系统就是所谓的传输系统(transport)。
虽然开发者可通过调用传输系统的发送功能来手动发送数据包,但缺乏经验的开发者很容易让系统变得不堪重负。
一个 Netcode 库可借助网络变量和远程程序调用(RPC)等功能,将数据包的发送流程从游戏代码中剥离出来。
Unity 目前有两种网络代码,Netcode for GameObjects(预发布)和Netcode for Entities(实验性)。



Unity Netcode Library


  • Unity多人游戏开发Netcode误区一: “前期不用想太多,后期把游戏转为多人游戏就好了”
事实上,多人游戏的实现并不简单。如果你想在游戏中加入多人游戏,应该尽早在设计和开发中考虑妥当。
为什么呢?多人游戏几乎触及游戏玩法的每一个方面,自然也就会影响到游戏开发。例如,单人游戏里的背包系统在多人游戏里需要同步到服务器上。许多在单人游戏中做起来很简单的东西,在多人游戏里就可能没那么简单了。
你有没有想过,为什么大多数多人游戏都使用运动学(kinematic)角色控制器,而很少有物理互动?因为即使是最有经验的开发者,也很难在多台设备上应用一个共有的物理模拟或预测模拟结果。
所以建议尽早检查游戏功能是否能很好地兼容多人游戏,特别是那些在其它游戏里不太看得到的机制。



游戏开发时间线

Unity多人游戏开发Netcode误区二: “低延迟总是好的”
低延迟不一定总是意味着流畅和一致的体验。  
虽然低延迟的确能让体验更流畅,但让游戏状态保持一致也同样重要。同步游戏状态所耗费的时间较少,因而对整体体验来说几乎微不足道。
要想提高游戏的流畅性和一致性,最常用的方法是建立缓冲区。从网络传入的数据包不会被立即处理,而会被放到一个队列中。客户端会在游戏的每一个tick(即一次模拟更新)从队列中取出一个数据包(理想情况)进行处理,同时保持住缓冲区的大小。这样,服务器在每个tick发送一个数据包时,客户端也能以同样的速率处理数据包。
但为什么要这么做呢?如果客户端立即处理掉传入的数据包,不也是每个tick接收一个数据包吗?在完美的网络条件下,这是对的,但在网络上传输的数据包一定会有或长或短的传输延迟。
每个数据包的往返时间(RTT)会存在着上下波动,这通常被称为抖动(jitter)。缓冲是一种提高延迟、减少抖动的方法,缓冲后的游戏往往有着更高的一致性,玩家体验也更好。


许多格斗游戏大多带有快速连按才能放出的招式,玩家一般会通过肌肉记忆来学习这些招式。要让游戏更为公平,很重要的一点是让角色行动与玩家输入达成一致。 那大多数格斗游戏是如何实现这种一致性的呢?他们以固定的频率来记录玩家输入,然后将输入缓存一小段时间,这样一来,玩家的输入便能一致地反映到游戏的帧上,平均的输入延迟会增加,但游戏也会变得更为一致。
虽然更大的缓冲区能让游戏更流畅,但过多的延迟经常会让玩家感到输入与游戏脱节。目前市面上有多种技术可用于稳定缓冲区、降低延迟的影响。客户端权威的游戏能将本地的输入立即应用到玩家角色上,做到延迟最小化。其他玩家则可以在缓冲区中储存敌对玩家的数据,让对方的表现更流畅。 虽然这种方法对玩家来说往往感觉很好,但它也可能导致作弊等其他问题。
因此竞技游戏可以使用一种叫做客户端预测的技术。本地玩家的输入会被立即应用,而服务器则会根据这些输入来预测玩家的行动,然后检查客户端是否执行了预测的动作,在必要时进行纠正。
Unity多人游戏开发Netcode误区三:“带宽是免费的”
为什么会有这样的误区呢?是因为与商用服务器相比,个人宽带的价格非常便宜(因为大部分个人用户的带宽用量和使用时长都比较少)。商用服务器就非常不一样了。它们通常一天到晚都在运行,游戏的服务器经常需要处理数百名玩家的通信,会按每千兆字节收费。
这也意味着降低带宽是节省运营成本的关键。并且,对带宽需求较低的游戏可让网速较慢的玩家也能很好地享受游戏。
多人游戏卡顿的一个原因是用户自己的网络拥堵。这种情况由于网络直播等大流量内容的火热而变得更为常见,降低游戏的带宽需求于是就更能改善玩家体验。
相比单人游戏,开发一款多人游戏难度系数还是不在一个等级的,部分初期可能会遇到的误区列出来,希望能帮大家避坑。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2025-5-15 04:37 , Processed in 0.137859 second(s), 26 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表