实时对战游戏PVP开发之PUN使用中常见问题总结

时间:2024-03-24 13:37:48

PUN在使用过程中常遇到的问题和疑问,本篇文章可以帮你解决PUN使用和选择的疑问,顺利完成PVP实时对战游戏开发。

哪款Photon产品适合我?


这是一个难以回答的问题,因为它取决于你正在制作的游戏和你的项目的具体情况。 不过,可以推荐以下内容帮你进行选择:

PhotonPUN说明

Photon产品说明

“Photon Cloud或Photon Server

如果您仍然有疑问,请随时与我联系,直接进行留言,帮你解决问题。

Photon Realtime和PUN有什么区别?


Photon Realtime和PUN都基于相同的API:LoadBalancing API。 两种产品共享相同的后端,相同的服务器应用程序,相同的核心概念。 起初,PUN是一个更好的UNet(旧的Unity网络)产品替代者。保留一个类似的API,具有更坚实的后端和丰富的功能。 然后它逐渐分化,成为Unity上多人游戏的头号解决方案。


我们拥有Photon Realtime Unity SDK,但PUN具有更高水平的高度封装组件式即用功能,如:


  • Unity中callbacks

  • Unity组件,可以序列化和同步。 PhotonView组件

  • PunRPC

  • 离线模式

然而,尽管PUN支持webhooks和持久的房间状态,但在加载已保存的游戏时,仍然无法100%地在场景中恢复网络对象的状态。 

Photon Cloud


什么是默认Photon区域?


只要至少有一个区域可用,客户端应该能够连接到Photon Cloud。 因此,为保证这一点,开发人员没有明确设置或选择“最佳区域”选项时会配置或使用默认值。 默认值可能因客户端SDK而异。 在本地SDK中,它是OpGetRegions中服务器返回的区域列表的索引0处的值。 在Unity和DotNet SDK上,默认区域应该是“EU”。


是否可以禁用某些区域?


是。 它通过定义允许区域的列表,来实现禁用某些区域。 可以在“Dashboard Regions Filtering”中进行设置。


Load Balancing 负载均衡


Photon房间支持的最大玩家数量是多少?


玩家人数是增加房间内流量的主要因素。 交换的消息越多,消息越多。


理论上没有限制。 对于超过8名玩家你需要进行管理。 对于大量的玩家,你可以将他们分开 - 你的服务器中 - 跨越多个房间。


Photon字符串是否有限制?


Photon使用字符串有很多用途:房间名称,大厅名称,用户名,昵称,自定义属性键等。


Photon二进制协议可以序列化最多32767个字符的字符串。 对于名称和UserID,32个字符应该足够了(例如GUID是32个字符)。 但是,对于自定义属性键,您应该使用较短的字符串以尽量减少开销。 这对于在大厅中可见的属性尤为重要,因为这些属于房间列表的一部分,并且会发送给大厅中的所有人,而不仅仅是房间中的几个客户。


自定义属性的数量是否有限制?


没有限制。但请注意,设置的自定义属性越多,客户端加载时间就越长,因为加入房间时,客户端也会收到所有属性。 如果您的人数太多,而且客户的加载时间超过一定的时间,可能导致客户端他们断开连接。


我可以使用Photon发送大量信息吗?


我们不建议使用Photon传输大数据(即文件),除非您知道您在做什么。我们建议您优化您交换的数据,如果您确实需要发送非常重要的信息可以和官方进行联系。


Photon Cloud对客户端缓冲区有500KB的服务器端限制。因此,根据上下文,可以考虑消息:


我们的客户端缓冲区大小在Photon Cloud> 500KB上“太大”。如果客户在短时间内遇到此限制,则服务器将断开连接。

“太大”不能与UDP一起发送,而不会导致大量可能导致> 100KB问题的片段。

“太大”不能将它分成多个大于1.2KB的UDP包(包括协议开销)。

对于定期发送的邮件(每秒10次或甚至更多),我们建议将它们的大小保持在1KB以下。


如果消息只发送很少(例如在比赛开始时发送一次),那么多KB的大小仍然很好,但我们仍然建议将其保持在10KB以下。


在特殊情况下,20KB甚至50KB可能是有意义的。但通常那些大的消息表明存在错误,您应该查看自己正在做的事情并重新考虑自己的选择。

哪些数据应该可靠地发送,哪些数据应该不可靠地发送?


首先,你应该知道只有当使用的协议是UDP时,可靠性才是一个选项。 TCP有其自己的“可靠性”机制,这里没有涉及。


发送可靠的信息意味着我们应该确保它到达目标。 因此,如果我们在等待足够的时间后没有收到确认,我们会重复发送,直到我们收到确认或我们超过了重新审理的次数。 此外,重复可靠的事件可能会导致额外的延迟并使后续事件延迟。


不使用可靠性的例子:

  • 玩家在实时游戏中的位置更新

  • 语音或视频聊天

使用可靠性的示例:

  • 在回合制游戏中转变事件

为什么我的游戏中有太多断线?


这些断开可能是由于各种原因。 我们已经有两个文档页面可以帮助您调查相关问题:


“分析断开”

“客户端连接处理”


每个房间每秒消息的计算方式?


Photon服务器每秒对入站和出站邮件的总数进行计数,并将其除以房间总数(在同一主服务器上)。


任何操作请求或操作响应或事件都被视为消息。 Photon操作返回一个可选的操作响应并触发零个或多个事件。 缓存的事件也被计为消息。


每个房间室内操作的消息成本:

实时对战游戏PVP开发之PUN使用中常见问题总结

如何计算用户消耗的流量?


这是一个复杂的问题。 首先,您需要知道所做的任何计算只是一个理论估算,并不一定反映实际情况。 我们建议构建概念验证并使用它来收集真实数据。


这里说的是如何估算房间内单个用户产生的流量:


我们假设如下:


一个房间有N个玩家。

玩家每秒发送F消息(以Hz为单位的消息发送速率)

平均消息大小为X(以字节为单位,有效负载(P)+协议开销(O))

一个普通玩家每个月在你的游戏上花费H小时

如果我们不考虑ACK,连接处理(建立,保持活跃等)命令并重新发送。 然后我们说平均来说,CCU消耗游戏中的C(以字节/月为单位)如下:

C = X * F * N * H * 60(分钟每小时)* 60(每分钟秒数)


PUN Plus和PUN Free有什么不同?


你可以在这里找到比较表。 但基本上,它们在功能和源代码上几乎完全相同。 差异因Unity版本而异,具体如下:


Unity 4 Pro,Unity 5,Unity 2017:

PUN Plus(PUN +)= PUN免费(PUN)+ 100CCU 60个月(凭证可兑换1个支持的Photon应用程序)

Unity 4免费

PUN Plus(PUN +)= PUN免费(PUN)+ 100CCU 60个月(凭证可兑换1个支持的Photon应用程序)+支持Android / iOS版本的套接字

Billing开票


如果我是学生或者爱好者是否提供特别优惠?


我们所有的产品都有免费的一级和一次性的入门计划。 我们通常也会参与Unity的资产商店销售,并偶尔向优惠券发放优惠券。


我可以为单个Photon应用程序组合多个100 CCU计划吗?


不可以.100个CCU计划不可堆叠,每个AppId只能应用一次。 如果您购买多个PUN +资产座位,那么您必须为每个100个免费CCU兑换单独的AppId。 如果您需要更多的CCU用于单个应用,则下一个更高的计划是500 CCU。 如果您订阅每月或每年的计划,那么您仍然可以在每月/每年计划的基础上将CCU保留60个月。