Jump to content
Unity Insider Forum

Dedicated Server-Client Struktur


TheHuanX

Recommended Posts

Hallo Forum, ich habe eine Frage.

 

Wie könnte ich die folgende Situation lösen: Ich habe einen Client und einen Server. Der Server soll(bzw DARF keine Grafik haben), also kann ich schonmal nicht mit Network.Instantiate und die Syncronisation mit NetworkView arbeiten. Wie löse ich das am besten?

 

Der server soll so eine Konsole wie windows, etc sein,wo man halt z.b Befehle eingeben kann.

 

Es soll halt alle Bewegungen,Rotation,animation,etc syncronisieren, aber dafür muss man halt ALLES selber schreiben. Und noch etwas. Ich habe verschiedene Scenen (Maps, Welten, wie auch immer man das nennen soll) und will, dass für jeden Spieler in der gleichen Scene wie der, der Bewegungen an den Server sendet, der Spieler syncronisiert wird. Dabei soll nicht nur 1 Scene sondern verschiedene Welten geben.

 

...Also wie kann ich das am besten Lösen und schreibt mal Bitte eure Ideen und Vorschläge zu Dedicated Server bitte.

 

Zusatzfrage: Ist es sinnvoll, dass der Server die Position der Spieler dauerhaft in eine Datenbank speichert und Client liest es aus, oder nicht? (Weil die können ja manipuliert werden-->Teleport-Hack).

 

Mfg.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Wie könnte ich die folgende Situation lösen: Ich habe einen Client und einen Server. Der Server soll(bzw DARF keine Grafik haben), also kann ich schonmal nicht mit Network.Instantiate und die Syncronisation mit NetworkView arbeiten. Wie löse ich das am besten?

 

Wieso nicht? Unity unterstützt schon seit Ewigkeiten einen "Batchmode", also ohne GUI - das geht inzwischen auch unter Linux ohne dass das Grafiksystem initialisiert wird. Den ganzen "Kram", den der Server nicht braucht kannst du auch relativ einfach durch eine entsprechend aufgesetzt Projekt- bzw. Szenenstruktur deaktivieren.

 

Damit wäre das Problem wahrscheinlich schonmal gelöst ;-)

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ein Auto kann ohne Gas zu geben auch rollen.

 

So musst du dir den Batchmode denken. Alles wird im Hintergrund wie gewogt arbeiten, außer dass man nichts sieht. Du lädst die Szenen natürlich auch. Sie werden nur halt nicht gezeichnet. Sonst wäre es ja fast gar nicht möglich.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Soweit ich es verstehe ist ja nicht direkt der Batchmode sein Problem, sondern die Tatsache daß immer nur eine Scene geladen sein kann. Er müßte aber mehrere Scenes gleichzeitig geladen haben, da sich die Spieler auf unterschiedlichen Scene befinden können. Und zwar zur selben Zeit.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Achso. Ok habe es verstanden.

Das ist natürlich auch möglich.

 

Ich hab dazu zwei Ideen. Beide haben Nach- und Vorteile. Die erste Idee ist einfach simple.

Die Welt und alles ist Clientseitig. Das heißt, dass auch die Kollisionen und so weiter alles durch den Clientberechnet wird (So etwas wie World of Warcraft). Danach wäre quasi keine Szenen da für den Server.

 

Ich habe Flappy Bird Klon -> "Flapping Crew" so aufgebaut. Jeder kann so weit fliegen wie er will. Die Map wird auf dem Server nicht gerendert. Man sieht nur die Vögel die rumfliegen. Daher alles Clientseitig.

 

Zweitens: Du kannst quasi in einer Scene mehrere Terrains erstellen die anders positioniert sind. Das heißt du hast in einer Szene mehrere Welten. Lass uns die Terrains einfach mal Welt nennen. Die Spieler halten sich mal dort auf mal da. Man müsste die Welten aber so weit auseinander ziehen, dass sie nicht gesehen werden können bzw. vielleicht durch bestimmte materialien von außen nicht sichtbar machen bzw in der Scene vielleicht deaktivieren reicht auch.

Was zusätzlich gemacht werden müsste ist, dass die Spieler in Gruppen unterteilt werden. Wer bekommt welche Daten, wer nicht. Die Spieler die in Welt 1 (Terrain 1) sind werden natürlich nicht die Daten brauchen, die in Welt 2 (Terrain 2) passieren.

 

wenn ich gerade so überlege finde doch den zweiten viel besser und simpel.

Vielleicht hab ich was vergessen, aber ihr könnt mich ja korrigieren :).

Link zu diesem Kommentar
Auf anderen Seiten teilen

Vielen Dank für eure Antworten, mein Problem liegt aber hierbei: Ich wöllte gerne verschiedene Scenen, bei der Methode mit 1 Welt wird es sehr rechenintensiv werden, bei vielen rigigbodys + collider. Sehr viele Objekte, etc.

Und zusätzlich muss ja noch jeder Spieler als objekt gerendert werden, und es bewegt sich ja JEDER spieler gleichzeitig (sofern er nicht AFk ist, oder so).

 

Und zusätzlich kommt ja noch, dass es irgendwann sehr unübersichtlich wird(Inspector).

Link zu diesem Kommentar
Auf anderen Seiten teilen

Soweit ich es verstehe ist ja nicht direkt der Batchmode sein Problem, sondern die Tatsache daß immer nur eine Scene geladen sein kann. Er müßte aber mehrere Scenes gleichzeitig geladen haben, da sich die Spieler auf unterschiedlichen Scene befinden können. Und zwar zur selben Zeit.

 

Wieso soll das nicht gehen? Application.LoadLevelAdditive(...)

 

Bei Traces of Illumination hab ich's so gemacht, dass ich auf dem Server alle 12 Levels gleichzeitig lade. Dabei ist zu beachten, dass sie natürlich auf unterschiedliche Positionen gelegt sind. Bei Traces of Illumination unterstützen die einzelnen Levels sogar "Instanzen", d.h. es können mehrere Gruppen von Spielern im gleichen Level spielen, ohne sich zu sehen. Auf der Server sind die aber sogar alle auf den gleichen Positionen.

 

Du kannst ohne Probleme die einzelnen Szenen auch einzeln bearbeiten, und es ist ein Multi-Scene Editing Feature in Arbeit (siehe Unity Blog - Multi Scene Editing). Wenn das mit Unity 5.x irgendwann kommt, kannst du die Szenen sogar parallel im Editor laden und bearbeiten. Das wird ziemlich cool ;-)

 

Für viele Spieler brauchst du sowieso irgendwann eigene Server - da ist das aktuelle Unity Networking zugegebenermaßen eher unspaßig. Da wäre jetzt Photon schon jetzt eine Möglichkeit, oder auf das neue Unity Networking warten (

), was auch irgendwann in 5.x kommen soll und auch schon in Alpha ist (d.h. das gibt's auch wirklich und die arbeiten auch wirklich dran ;-) ).
Link zu diesem Kommentar
Auf anderen Seiten teilen

Wieso soll das nicht gehen? Application.LoadLevelAdditive(...)

Weil diese Funktionalität den Inhalt der angegebenen Szene zur aktuell geladenen Szene dazu lädt und nicht eine weitere Szene parallel dazu lädt. Das sind ja zwei unterschiedliche Dinge.

D.h. die Scenes müssen dafür ausgelegt sein das man sie zusammenführt.

Das würde zum zweiten Vorschlag von MaZy passen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Archiviert

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

×
×
  • Neu erstellen...