2016-12-30 5 views
0

Ich baue einen Multi-Player-Server für ein Open-World-Spiel, das ich mit Unity 5 erstelle. Ich habe Socket.IO als Echtzeit-Framework gewählt wie ich es mehr als jeder andere Echtzeit-Framework kenne.Socket.IO behandelt Multiplayer-Bewegung in Open-World

Wie kann ich die aktive Buchse jedes aktiven Spielers so speichern, dass ich jeden Spieler anhand seiner Entfernung von einer Schnur aussortieren kann? (Zum Beispiel, um die Position eines sich bewegenden Spielers nur für Spieler in der Nähe zu aktualisieren, anstatt sie an alle Spieler auf dem Server zu senden)?

Antwort

0

Das klingt mehr wie eine Datenstruktur Problem für mich. Eine einfache Möglichkeit, den Sinn kommt zu haben wäre:

Zones - das ist eine regionale Aufteilung des Raumes im Spiel ist
Spieler - dies stellt ein individuelles spielen
Sockel - die Mittel zu mit einem bestimmten Player kommunizieren

Der Player sollte einen Verweis auf den Socket haben, um zu kommunizieren. player.SendMessage("hey there");

sollte eine Zone eine Liste von

Spielern hat
zonePlayers = new List<Player> Players(); 

, wenn eine Nachricht gesendet werden soll, durch einfach die gesamte Zone über die Spielerliste durchlaufen und diese Nachricht an jeden Spieler schicken.

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

Finden Sie heraus, wie Sie eine Nachricht an einen Player senden. Finde heraus, wie man Spieler logisch gruppiert.

Ich habe gerade über Socket.IO gelesen und sie haben bereits Zimmer. Wenn Sie einen Raum pro Zone definieren und sich nur einen Spieler für diesen Raum registrieren lassen und diesen Raum verlassen, wenn er die Zone verlässt/verlässt, können Sie die bereits eingebaute Funktionalität nutzen, um die Gruppe zu benachrichtigen.

+0

Danke für die Antwort! Ich habe am Ende eine Methode erstellt, die alle Spieler sortiert, ihre X/Y/Z nimmt und nur die innerhalb einer durch einen Parameter in der Methode angegebenen Entfernung zurückgibt. Ich kann dann ein Update an alle diese Spieler senden. Ist das praktisch? –

+0

Klingt wie ein vernünftiger Start. Wenn es zum Flaschenhals wird, sind Sie in einer Situation, in der Sie ein gutes Problem haben (zu viele Spieler/zu große Welt) Wenn Sie alle Spieler jedes Mal durchlaufen, wird eine Nachricht gesendet, die klingt unnötig. – Beanish