【发布时间】:2015-01-01 14:39:08
【问题描述】:
我使用获取房间列表功能来获取服务器中的房间。但是一旦我加入了特定的房间,我就看不到列表了?即使我连接到房间,我如何才能看到列表?
【问题讨论】:
标签: networking unity3d photon
我使用获取房间列表功能来获取服务器中的房间。但是一旦我加入了特定的房间,我就看不到列表了?即使我连接到房间,我如何才能看到列表?
【问题讨论】:
标签: networking unity3d photon
简短回答:恐怕答案是您不能 - 它不支持开箱即用。
长答案:
原因在于 Photon Loadbalancing 的可扩展架构 这是服务器端应用程序和 sdk 的一部分,通常是 与 PUN 结合使用。负载平衡也是驱动 Photon Cloud 的原因,以防万一您也提到了这一点。
发生的情况是,您的客户端最初会连接到所谓的 Master,即进行配对的地方。您的客户可以使用房间列表或任何其他匹配选项(例如 JoinRandom)创建新房间或加入房间。
一旦发生这种情况,主机将向您的客户端发送连接到托管游戏的 GameServer 所需的信息。 如果是新客户端,它会将您的客户端发送到负载最少的服务器。
在加载下游戏列表和它们的属性可以很快改变 - 创建游戏 - 玩家加入和离开 - 游戏可以达到最大允许玩家数
此更改从所有 GameServer 传播回 Master 但它不会传播到所有 GameServers,这意味着一旦它进入房间,它就不能对您的客户端可用。
这里有一个关于这个主题的更长的线程: http://forum.exitgames.com/viewtopic.php?f=17&t=3093
讨论的要点是:
一般来说,在游戏中使用游戏列表作为设计组件往往被高估了 - 这是一种在开发过程中进行匹配的简单方法,但在上线时(对于大多数游戏)效果不佳。
玩家通常不关心并匹配基于过滤器的游戏(由于 photon 支持使用过滤器进行匹配,因此不需要游戏列表),通常会导致玩家选择列表中的第一款游戏之一。在负载下,这通常意味着许多玩家尝试加入同一个游戏,这通常是一个问题,因为大多数游戏都需要某种最大玩家数。 BTW:如果他们在乎的话,通常是“我不想和朋友一起玩”,这也得到了光子匹配的支持。
如果您有移动客户端,游戏列表可能会成为一个负担,特别是对于非常活跃的游戏,加载列表需要一些时间,并且它使用带宽来加载和维护它们。由于延迟,玩家也更有可能选择已经满员的游戏。
【讨论】:
您可以通过创建PhotonNetwork 的第二个实例并将其连接到托管游戏的所述服务器,并让此实例成为一个游戏对象,该对象也与具有您的大厅脚本的对象对话。不确定这是否会奏效或实施起来会有多难。我自己目前正在使用 Photon。
【讨论】: