Розетка.IO управление движением нескольких игроков в открытом мире

Я создаю многопользовательский сервер для игры с открытым миром, которую я создаю с помощью Unity 5. Я выбрал сокет.IO, чтобы быть в режиме реального времени, как я знаю его больше, чем любой другой в режиме реального времени.

Как я могу хранить сокет каждого активного игрока таким образом, чтобы я мог сортировать каждого игрока по их расстоянию от шнура. (например, чтобы только обновить позицию движущихся игроков для игроков, которые находятся поблизости, а не отправлять всем игрокам на сервере)?

1 ответ

  1. Это больше похоже на проблему структуры данных для меня. Простой способ, который приходит на ум, был бы иметь:

    Зоны-это региональная разбивка пространства в игре
    игрока-это представляет собой отдельный игровой
    сокет-средства для общения с данным игроком

    Игрок должен иметь ссылку на сокет для связи. player.SendMessage("hey there");

    Зона должна иметь список игроков

    zonePlayers = new List<Player> Players();
    

    если сообщение должно быть передано через всю зону, просто повторите список игроков и отправьте это сообщение каждому игроку.

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

    Узнайте, как отправить сообщение игроку.
    Выясните, как логически группировать игроков вместе.

    Я только что прочитал о Socket.IO и у них уже есть номера. Если вы определяете номер для каждой зоны и просто имеете регистрацию игрока для этой комнаты и покидаете эту комнату, когда они все / покидают зону — вы можете использовать уже встроенные функции для обмена сообщениями с группой.