【问题标题】:Socket.IO handling multi-player movement in open-worldSocket.IO 处理开放世界中的多人运动
【发布时间】:2016-12-31 04:06:56
【问题描述】:

我正在为使用 Unity 5 构建的开放世界游戏构建多人服务器。我选择 Socket.IO 作为实时框架,因为我比任何其他实时框架都了解它.

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

【问题讨论】:

    标签: unity3d socket.io multiplayer


    【解决方案1】:

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

    区域 - 这是游戏中空间的区域细分
    玩家 - 这代表个人玩
    插槽 - 与给定玩家交流的方式

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

    一个区域应该有一个玩家列表

    zonePlayers = new List<Player> Players();
    

    如果要在整个区域广播消息,只需遍历玩家列表并将该消息发送给每个玩家。

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

    弄清楚如何向玩家发送消息。 弄清楚如何在逻辑上将玩家分组在一起。

    我刚刚阅读了有关 Socket.IO 的信息,他们已经有了房间。如果您为每个区域定义一个房间,并让玩家注册该房间并在他们完成/离开该区域时离开该房间 - 您可以利用已经内置的功能向群组发送消息。

    【讨论】:

    • 感谢您的回复!我最终创建了一个方法,该方法对所有玩家进行排序,获取他们的 X/Y/Z 并仅返回方法中参数指定距离内的那些.然后我可以向所有这些玩家发送更新。实用吗?
    • 听起来是一个合理的开始。如果它成为瓶颈,您将处于需要处理好问题的情况(玩家太多/世界太大)如果您每次发送消息时都遍历所有玩家,但这听起来没有必要.
    猜你喜欢
    • 1970-01-01
    • 2015-05-29
    • 2018-10-01
    • 2015-12-16
    • 1970-01-01
    • 2014-02-08
    • 1970-01-01
    • 1970-01-01
    • 2010-11-28
    相关资源
    最近更新 更多