2016-12-30 1 views
0

Je construis un serveur multi-joueurs pour un jeu open-world que je construis avec Unity 5. J'ai choisi Socket.IO comme framework temps-réel comme je le sais plus que tout autre cadre en temps réel.Socket.IO gère le mouvement multi-joueurs en monde ouvert

Comment puis-je stocker la prise de chaque lecteur actif d'une manière qui me permettrait de trier chaque lecteur par leur distance d'un cordon. (par exemple, ne mettre à jour qu'une position de joueur en mouvement vers des joueurs qui se trouvent à proximité plutôt que d'envoyer à tous les joueurs sur le serveur)?

Répondre

0

Cela ressemble plus à un problème de structure de données pour moi. Une façon simple qui vient à l'esprit serait d'avoir:

Zones - c'est une répartition régionale de l'espace dans le jeu
Joueur - ce qui représente une personne jouant
Socket - les moyens de communiquer à un joueur donné

Le joueur devrait avoir une référence à la prise pour communiquer. player.SendMessage("hey there");

Une zone devrait avoir une liste des joueurs

zonePlayers = new List<Player> Players(); 

si un message doit être diffusé à travers toute la zone simplement itérer sur la liste des joueurs et envoyer ce message à chaque joueur.

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

Déterminez comment envoyer un message à un lecteur. Déterminez comment regrouper logiquement les joueurs. Je viens de lire à propos de Socket.IO et ils ont déjà des chambres. Si vous définissez une pièce par zone et que vous avez juste un joueur qui s'enregistre pour cette pièce et quittez cette pièce quand elle quitte/quitte la zone, vous pouvez utiliser la fonctionnalité déjà intégrée pour envoyer des messages au groupe.

+0

Merci pour la réponse! J'ai fini par créer une méthode qui trie tous les joueurs, attrape leur X/Y/Z et ne renvoie que ceux à une distance spécifiée par un paramètre dans la méthode. Je peux ensuite envoyer une mise à jour à tous ces joueurs. Est-ce pratique? –

+0

Semble comme un début raisonnable. Si cela devient le goulot d'étranglement vous serez dans une situation où vous avez un bon problème à traiter (trop de joueurs/monde trop grand) Si vous parcourez tous les joueurs à chaque fois qu'un message est envoyé qui sonne inutile cependant. – Beanish