2016-12-30 37 views
0

我正在为使用Unity 5构建的开放式世界游戏构建多玩家服务器。我选择了Socket.IO作为实时框架因为我比任何其他实时框架都更了解它。Socket.IO处理开放式世界中的多玩家运动

我该如何储存每个活动播放器的插槽,以便我可以根据每个播放器与电源线的距离来分类。 (例如,只更新移动的玩家位置给附近的玩家,而不是发送给服务器上的所有玩家)?

回答

0

这听起来更像是一个数据结构问题。我想到的一个简单的方法是将有:

- 这是空间中的游戏
球员进行区域划分 - 这代表一个独立的播放
插座 - 手段与给定播放器进行通信

播放器应该有一个对Socket进行通信的引用。 player.SendMessage("hey there");

一个区域应该有球员

zonePlayers = new List<Player> Players(); 

列表如果消息要广播通过整个区域简单地遍历球员名单并发送消息给每个玩家。

foreach (Player player in Players) { 
    player.SendMessage(msg); 
} 

找出如何发送消息给玩家。 找出如何从逻辑上将玩家分组在一起。

我刚刚读到Socket.IO,他们已经有了房间。如果您为每个区域定义一个房间,并且只有一个玩家为该房间注册,并在整个房间/离开该区域时离开该房间 - 您可以利用已经内置的功能来发送消息。

+0

感谢您的回复!我最终创建了一种方法,通过所有玩家进行排序,抓取它们的X/Y/Z,并且只返回方法中参数指定的距离内的方法。然后我可以向所有这些球员发送更新。这是实际的吗? –

+0

听起来像是一个合理的开始。如果它成为瓶颈,你将面临一个需要处理的问题(玩家太多/世界太大) 如果每次发送消息发出声音不必要。 – Beanish