Jump to content
Unity Insider Forum

Dedicated Server - Unity


Shalafi

Recommended Posts

Hi,

ich möchte ein kleines 3D Multiplayer Spiel erstellen, was mit deinem dedicated Server arbeiten.

Ich hab mir einige Guides angesehn, allerdings hab ich eine Sache noch nicht verstanden.
Eigendlich habe ich gedacht, dass der Server doch die Daten der Clients immer gegenprüfen muss. Wenn der Client zB eine Positions-Angabe schickt, muss der Server prüfen ob der Spieler da überhaupt sein darf. Sonst konnte doch jemand einfach falsche Positionsangaben verschicken und sich so durch Wände teleportieren oder ähnliches.  Dazu muss der Server ja dann auch die Unity-Map kennen. Dazu hab ich bisher noch keine Informationen gefunden.

Wie wird sowas in der Praxis umgesetzt?


Gruß

Link zu diesem Kommentar
Auf anderen Seiten teilen

  • 2 weeks later...

Hi,

ich denke an ein Spiel Richtung Minecraft (Citybuild).
Das heißt es gibt verschiedene Zonen, die Spieler bebauen können. Muss ich da für jede Zone eine eigene (World-)Server Instanz starten?
Ich überlege noch wie ich die ganze Server-Architektur aufbaue.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo, es ist normal, dass man eine Idee im Kopf hat und dies auch umsetzen möchte, aber gleich etwas kompliziertes zu machen würde ich nicht empfehlen bzw. lieber einen Profi da ranlassen. Nicht umsonst brauchen Spiele wie GTA 5 z.B. 5 Jahre (und dort ist ja so mit Instanzen) und dort ist ein großes Team beteiligt.

Zu der ersten Post: Es gibt verschieden Varianten, wie man einen Server und Client logisch aufbauen kann. Du muss erst mal die Frage beantworten, wie du es gern hättest. Z.B.

  • Gegen Cheater vorgehen
  • Minimale Breitband (also ohne Network Lags)?
    • Will man mehr Spieler haben dafür aber komplexere System (wie das mit Instanzen)
    • Oder weniger Spieler ohne Performance Probleme.
  • usw.

Je nachdem kann man vieles Serverseitig programmieren oder clientseitig.

Minecraft hatte auch vieles früher Clientseitig. Z.B. Inventar. Doch schnell merkte man, dass es echt nervig ist, denn viele duplizierten seine Items. 
GTA 5 ist z.B. Clientseitig, deswegen gibt es leider auch viele Cheater, dafür aber merkt man, dass es lagfrei läuft, außer der Spieler laggt.. dann bewegt sich das Auto wirklich komisch.

Wenn du jetzt vom Server aus validieren willst, dann siehst das so aus. Client sendet an Server "Hey ich drücke jetzt W um vorwärts zu bewegen", der Server antwortet "Hey ok du bewegst dich nach vorn und ich sende an alle weiter, dass du das tust". Hier kann man nun überlegen, ob man erst auf Server Antwort wartet oder bereits schon nach vorn bewegt.

Ich hab beide varianten mal ausprobiert und habe aber eigene Logik aufgebaut und nicht, die im Internet vorgeschlagen sind (welches aber eig besser ist), aber lief ganz ok. Bei sehr hohen Ping aber war es echt nicht mehr schön.

Nun kommt der Teil mit allgemein Sachen validieren. Spieler möchte eine Tür auf machen - Server: Du darfst es nicht. Kein ErlaubnisDas ist wie die Vorwärtsbewegungssache nur, dass hier der Server überprüft, ob der Spieler das überhaupt darf.

Das durch Wände teleportieren z.B. das geht alles in World of Warcraft.  Ich meine in Minecraft auch. Kann mich erinnern, dass manche Fly-Hacks hatten oder sowas. Aber alles andere was Inventar oder so angeht, geht nicht vom Client aus.

Am 24.2.2019 um 23:09 schrieb Shalafi:

Dazu muss der Server ja dann auch die Unity-Map kennen. Dazu hab ich bisher noch keine Informationen gefunden.

Ja Unity muss dazu die Map kennen. Was man machen kann ist, dass man Unity Server wie ein Spiel startet und dann als Server startet (Fast so als würde man selbst ein Spiel hosten). Das kann man als Dedicated Server benutzen.

vor 1 Stunde schrieb Shalafi:

ich denke an ein Spiel Richtung Minecraft (Citybuild).
Das heißt es gibt verschiedene Zonen, die Spieler bebauen können. Muss ich da für jede Zone eine eigene (World-)Server Instanz starten?
Ich überlege noch wie ich die ganze Server-Architektur aufbaue.

Ich glaube mit UNet kann man keine Zonen erstellen, aber ich meine, wenn man den Network ProximityChecker umschreibt, kann man sowas in der art programmieren: https://docs.unity3d.com/Manual/class-NetworkProximityChecker.html
Das ist nämlich dafür da, wer wo wen sehen kann und Informationen bekommen usw.

Ansonsten muss man mit low level api anfangen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Da musst du leider ausführlicher sein.

Sagen wir mal in der Scene die normale Map ist 10x10 km groß und ein Dungeon 2x2 km. Dann kann man diesen Dungeon ganz wo anders packen z.B. ganz weit links. Die Spieler betreten dann einfach da rein. Mit UNet NetworkProximityChecker geht das auch gut. Den Dungeon kann man ja als Prefab machen und jedes mal neu Laden oder einen Reset programmieren (also die Sachen spawnen einfach erneut).

Soll aber der gleichen Dungeon mehrmals betretbar sein und eigene Instanzen haben, dann kann man mit mehreren Server arbeiten.

Da gibt es halt viele Möglichkeiten. Das lässt sich nicht so einfach beantworten.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Wenn man die Bereiche als Instanzen macht dann ja.
Zur Klarstellung: Eine Instanz im Spiel bedeutet, dass es ein unabhängiger Bereich für die Spieler sind und sind abgekoppelt mit der anderen Welt. Sie bekommen also nichts mit und anders herum auch nicht.

Serverinstanzen können auch einfach nur mehrere Server in einem Prozess bedeuten. Also man kann das schnell verwechseln (zu mindest ich).

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hi,

also ich gedenke das Serversystem so aufzubauen, dass es einen Masterserver gibt, der die ganzen Login-Prozesse übernimmt und die Spieler auf die gewünschten World-Server weiterleitet.
Jeder World-Server (eine Unity-Instanz) ist dann für ein Dorf zuständig. 

 

Was genau meinst du mit "mehrere Server in einem Prozess"? Meinst du damit das mehrere Server auf einem Rechner laufen? Oder kann man mit einer Unity-Instanz mehrere Server simulieren?



Gruß

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 2 Stunden schrieb Shalafi:

Hi,

also ich gedenke das Serversystem so aufzubauen, dass es einen Masterserver gibt, der die ganzen Login-Prozesse übernimmt und die Spieler auf die gewünschten World-Server weiterleitet.
Jeder World-Server (eine Unity-Instanz) ist dann für ein Dorf zuständig. 

So kann man das machen

vor 2 Stunden schrieb Shalafi:

Was genau meinst du mit "mehrere Server in einem Prozess"? Meinst du damit das mehrere Server auf einem Rechner laufen? Oder kann man mit einer Unity-Instanz mehrere Server simulieren?

Ich meinte damit beides. Ein Prozess ist ein Programm z.B. Unity und da drinne halt mehrere Server starten. Ob es mit UNet HLAPI geht weiß ich gerade nicht, da der NetworkManager singleton hat. Mit Server die nur minimal aufgebaut sind z.B. nur Konsoleserver oder so, da geht das auf jeden Fall.

Wie willst du das mit Dorf machen? Startest du selber den Server?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hi,

also für die Entwicklung werde ich natürlich erstmal selber nen Server hosten. Ich möchte auch erstmal die Machbarkeit meiner Idee ausprobieren und nen kleinen Prototypen entwickeln.

Ich arbeite hauptberuflich auch bei einem großen deutschen ISP, deshalb sollten später auch gemietete Root-Server möglich sein.

Aber wie gesagt, erstmal möchte ich ausprobieren, ob das technisch überhaupt machbar ist.

 


Gruß

Link zu diesem Kommentar
Auf anderen Seiten teilen

Archiviert

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

×
×
  • Neu erstellen...