Jump to content
Unity Insider Forum

Multiplayer Unet oder andere Moeglichkeit?


Recommended Posts

Ich möchte Objekte auf einer Karte ständig aktualisieren bzw. ich muss nur ständig Koordinaten dieser Objekte an den Client senden (Für den Spieler ist es nur wichtig ob das Objekt existiert und welche Koordinaten das Objekt hat. Das Objekt bewegt sich nicht oder ähnliches). Es kann aber nicht nur ein Broadcast vom Server aus sein da der Spieler auch neue Objekte hinzufügen kann. Als erstes ist mir Unet eingefallen aber ich versuche Unet eigentlich zu vermeiden.

 

Warum versuche ich Unet zu vermeiden ?

Ich hab damit schon einige male Test Programme geschrieben und halte Unet für ziemlich schwer verständlich.

 

Gibt es eine andere Möglichkeit wie ich dem Client ständig Koordinaten schicken kann oder bin ich gezwungen mich mit Unet richtig auseinander zu setzen ?

 

Danke im voraus :)

Link zu diesem Kommentar
Auf anderen Seiten teilen

Wenn ich etwas mit Multiplayer entwickle, dann nehme ich immer die Photon Engine. Das einfachste ist sicher PUN (Photon Unity Networking). Das kannst du kostenlos im Asset Store laden :)

 

Danke, ich glaube bei PUN werde ich das Problem haben das es Matchmaking basierend ist. Ich brauche alle Spieler in einem Netzwerk "Raum"

Link zu diesem Kommentar
Auf anderen Seiten teilen

Du willst also ein MMO machen? :rolleyes:

 

Jaein ein MMO hört sich nach einen super großen Projekt an :D Es ist ein Strategie MMO was auch für eine Person realisierbar ist.

 

Der Spieler kann mit Objekten auf der Map Interagieren und neue Objekte setzen. Alles was ich machen möchte ist diese Objekte für jeden Spieler zu Aktualisieren (Position und ob das Objekt existiert)

Link zu diesem Kommentar
Auf anderen Seiten teilen

Das ist nicht so unproblematisch, wie du dir das offenbar vorstellst... besonders, wenn einem etwas von der Komplexität von UNet Probleme macht.

 

Ich würde mich mit Unet richtig auseinandersetzen wenn es nicht Matchmaking Based wäre. Ich bin noch ein Anfänger im Multiplayer und suche nach eine Lösung alles Spieler mit einem Server zu aktualisieren und Informationen an den Spieler zu senden

Link zu diesem Kommentar
Auf anderen Seiten teilen

Bei so vielen Spielern wird das ganze sowieso auf verschiedene Server verteilt... aber so, dass in der Spielwelt keine "Grenzen" auftauchen. Das ganze ist schwierig... Ausser du meinst es eher wie ein "Browsergame", bei dem der Spieler in der 3d Welt etwas bauen und dann auf einer art Weltkarte aktualisiert wird. Aber sobald die Bewegungen der Spieler etc in Echtzeit übertragen werden sollen, ist es schwierig.

 

Aber auch da würde ich auf Photon setzen... aber nicht PUN sondern Photon Server. Es gibt verschiedene Produkte von Photon.

 

Ich denke, dass der MMORPG Markt komplett übersättigt ist. Wenn du wirklich ein MMORPG machen willst, dann würde ich mir mal die Hero Engine anschauen...

Link zu diesem Kommentar
Auf anderen Seiten teilen

Weil es, so wie ich es bei Unet verstanden habe, die Spieler auf einzelne Server verteilt werden. Wahrscheinlich ist das umprogrammierbar, aber ist es auch dafür vorgesehen ?

Keine Ahnung, wo du das herhast. Du connectest einen Client auf einen Server und fertig. Automatisch Leute auseinandersortieren tut es nicht.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Bei so vielen Spielern wird das ganze sowieso auf verschiedene Server verteilt... aber so, dass in der Spielwelt keine "Grenzen" auftauchen. Das ganze ist schwierig... Ausser du meinst es eher wie ein "Browsergame", bei dem der Spieler in der 3d Welt etwas bauen und dann auf einer art Weltkarte aktualisiert wird. Aber sobald die Bewegungen der Spieler etc in Echtzeit übertragen werden sollen, ist es schwierig.

 

Aber auch da würde ich auf Photon setzen... aber nicht PUN sondern Photon Server. Es gibt verschiedene Produkte von Photon.

 

Ich denke, dass der MMORPG Markt komplett übersättigt ist. Wenn du wirklich ein MMORPG machen willst, dann würde ich mir mal die Hero Engine anschauen...

 

Genau so wie du es mit dem Browsergame beschrieben hast meine ich das. Der Spieler kann was bauen und es soll für jeden auf der "Weltkarte aktualisiert werden.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Wenn du keinen Echtzeitanspruch hast, sondern eher etwas ungefähres wie in OGame und konsorten, dann sind die ganzen Echtzeitnetzwerkbibliotheken tatsächlich nichts für deinen Anwendungsfall.

 

Vielleicht hätte ich sofort mit so einem Beispiel anfangen sollen :P Sorry

Genau so etwas wie Ogame etc meine ich. Also ich wollte wissen was ich da am besten nutze

 

Als ich angefangen habe zu Programmieren war ich noch der Meinung das wäre alles mit SQL realisierbar aber sobald ein neues Objekt auf der Map erscheint müssen die anderen Spieler aktualisiert werden

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich denke du kommst da eh nicht ohne MySql aus. Und wenn du ein Game Server hast, greift auch der auf die MySql DB zu, warum also nicht direkt? Würde dann aber dennoch ein Server machen, um den Chat zu regeln. Könntest ja dann auch ein Befehl senden, damit der Client die Weltkarte aktualisiert.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich denke du kommst da eh nicht ohne MySql aus. Und wenn du ein Game Server hast, greift auch der auf die MySql DB zu, warum also nicht direkt? Würde dann aber dennoch ein Server machen, um den Chat zu regeln. Könntest ja dann auch ein Befehl senden, damit der Client die Weltkarte aktualisiert.

 

Das ist mir bewusst, also soll ich jeden Spieler einzeln ständig die Datenbank checken lassen ?

Mir wurde von Leuten gesagt das es eine zu große Belastung wäre

Link zu diesem Kommentar
Auf anderen Seiten teilen

Nein, du hast ja bestimmte Ressourcen. Zum Beispiel 300 Stein und 2 Steinmetze die 20 Stein pro Stunde fördern. Du übermittelst nur den aktuellen Steinvorrat und die Produktionsmenge. Jetzt kannst du die Steinproduktion Lokal erhöhen (sie erhöht sich auf dem Server ja gleich schnell). Und wenn sich eine Armee über die Karte bewegt, dann ist Startpunkt, Zielpunkt und die benötigte Zeit bereits vorgegeben. Die ganze Truppenbewegung wird also nur Lokal umgesetzt. Wenn du auf dieser Seite oben auf "Refresh" klickst, dann wird auch auf eine Datenbank zugegriffen und einiges an Daten herumgeschoben. Das ist am Ende das selbe.

 

Meinst du das?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Der Trick ist, nicht rund um die Uhr die Datenbank zu belasten.

Ein Spieler in OGame macht hier und da eine Abfrage und postet ab und zu etwas in die Datenbank, und der Rest passiert lokal.

Es wird z.B. nicht jede Sekunde gefragt, wie lange ein Event noch hin ist, sondern ein Mal am Anfang, und dann werden die Sekunden lokal runtergezählt.

 

Und so Nebenbei: MySQL ist nicht die einzige Sorte Datenbank.

 

//e: Joa, zweiter :)

Link zu diesem Kommentar
Auf anderen Seiten teilen

Nein, du hast ja bestimmte Ressourcen. Zum Beispiel 300 Stein und 2 Steinmetze die 20 Stein pro Stunde fördern. Du übermittelst nur den aktuellen Steinvorrat und die Produktionsmenge. Jetzt kannst du die Steinproduktion Lokal erhöhen (sie erhöht sich auf dem Server ja gleich schnell). Und wenn sich eine Armee über die Karte bewegt, dann ist Startpunkt, Zielpunkt und die benötigte Zeit bereits vorgegeben. Die ganze Truppenbewegung wird also nur Lokal umgesetzt. Wenn du auf dieser Seite oben auf "Refresh" klickst, dann wird auch auf eine Datenbank zugegriffen und einiges an Daten herumgeschoben. Das ist am Ende das selbe.

 

Meinst du das?

Der Trick ist, nicht rund um die Uhr die Datenbank zu belasten.

Ein Spieler in OGame macht hier und da eine Abfrage und postet ab und zu etwas in die Datenbank, und der Rest passiert lokal.

Es wird z.B. nicht jede Sekunde gefragt, wie lange ein Event noch hin ist, sondern ein Mal am Anfang, und dann werden die Sekunden lokal runtergezählt.

 

Und so Nebenbei: MySQL ist nicht die einzige Sorte Datenbank.

 

//e: Joa, zweiter :)

 

Okay das habe ich verstanden und das werde ich auch so machen danke :)

 

Ich habe nur noch folgendes Problem:

Ich habe eine Karte (2D). Auf dieser karte können von Spielern Portale gesetzt werde die für andere Spieler ziemlich wichtig sind. Sobald ein Portal gesetzt wurde müsste das bei allen anderen auf der Karte aktualisiert werden.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich denke du kommst da eh nicht ohne MySql aus. Und wenn du ein Game Server hast, greift auch der auf die MySql DB zu, warum also nicht direkt? Würde dann aber dennoch ein Server machen, um den Chat zu regeln. Könntest ja dann auch ein Befehl senden, damit der Client die Weltkarte aktualisiert.

Link zu diesem Kommentar
Auf anderen Seiten teilen

  • 2 months later...

Entschuldige, dass ich mich einmische, aber das muss doch auch ohne einen Befehl gehen, dass dieses Portal für alle Spieler aktualisiert wird. Ich vermute das wäre dann die gleiche Art und Weise wie der Refreshbutton. 

Entweder du arbeitest mit einem Chunk, also sobald die Spieler in einen bestimmten Abschnitt der Karte kommst, wird dieser dauerhaft mit dem Server aktualisiert oder du arbeitest mit einem automatischen "Speicher". Also sobald du dieses Portal setzt, bzw. aktiviert wird, synchronisiert sich der Spieler mit dem Server und muss nicht den Refresh-Knopf drücken. Dies würde einen Datenverlust stark vermeiden, falls jemand vergessen sollte den Befehl zu benutzen oder das Spiel unerwartet beendet (Crash, Absturz, Error, etc.). Außerdem behebt dies auch die doppelte Belegung des Platzes, wenn zwei Spieler in ähnlicher Zeit an einem gleichen Platz dieses Portal setzen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Archiviert

Dieses Thema ist jetzt archiviert und für weitere Antworten gesperrt.

×
×
  • Neu erstellen...