Jump to content
Unity Insider Forum

TCP für FPS-Multiplayer?


Shalafi

Recommended Posts

Hi,

kann man (mittlerweile) TCP für einen schnellen Multiplayer FPS benutzen, oder doch lieber (R)UDP?
2 verschiedene Verbindungen (1x TCP, 1xUDP) würde warscheinlich zu Problemen mit dem Sync führen.
 

 

Ich hab mich noch nicht richtig damit beschäftigt, aber taugt das Unity-Network was? Ich hatte mal gelesen, dass das nicht soo toll sein soll. ;)

 

 

 

Gruß

 

 

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Zu TCP und UDP
Ich tendiere zu TCP und man kann dafür benutzen, aber empfohlen wird dennoch UDP. UDP und TCP zusammen funktionieren nicht, aber man kann trotzdem programmieren, dass die Daten die von TCP kommen durch UDP weiter geleitet werden können, aber sowas tut man nur, wenn man keine andere Wahl hat (z.B. Browser unterstützen nur TCP).

UDP ist allgemein schneller, aber nicht so verlässlich wie TCP. Für schnelle FPS kann UDP besser geeignet sein. Mirror Entwickler haben z.B. UDP benutzt für ihren Mmmorpg Packet im AssetStore und es gab da sehr viele Probleme. Beste Entscheidung für sie war TCP am Ende. Zitat: "Telepathy was originally designed for uMMORPG after 3 years in UDP hell.". Telepathy ist deren TCP library.

Unitys UNet ist veraltet wird nicht mehr entwickelt. Ja hatte gute und schlechte Seiten, aber mehr schlechte.

Mirror bzw. https://github.com/vis2k/Mirror hat UNet sehr früh schon übernommen und eine eigene Version gemacht. 
Heute finde ich es als das beste High Level API Network System was kostenlose Networks angeht, da.
Aber kann das auch nicht 100%ig beurteilen, weil da noch einige andere gibt, wo ich nur bisschen angeschaut habe. Es gibt sogar Entwickler, die "neidisch" auf Mirror sind und Blogeinträge posten warum ihre wohl besser ist. Hab selber gelesen und teilweise Sachen stimmten nicht.
Falls dir High Level API nichts sagt bedeutet das einfach nur, dass du kaum was programmieren musst, um ein Netzwerk spiel zu entwickeln. Dies drum herum ist schon alles fertig.

Mirror hat sehr aktive Discord Community. Bin da auch voll oft aktiv (nur in letzter Zeit nicht so).

Mirror unterstützt alle Transports (TCP, UDP, Websockets, Steam usw). Man kann sie schnell auswechseln oder alle zusammen verwenden. Schau dafür das Bild an. Libuv2k soll angeblich einer der schnellsten Transports werden (noch in Entwicklung).    

image.png

image.png

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich spiele gerade ein MMORPG das mit TPC programmiert wurde und die Netzwerkperformance ist unterirdisch und ich führe das zu großen Teilen auf TCP zurück. Vor allem in Raids gibt es hier massive FPS-Probleme, also wenn X Spieler in einer Gruppe kämpfen. Meine Vermutung ist dadurch das TCP sich alle Pakete bestätigen lässt steigt die Netzwerklast (und die CPU-Last) mit der Anzahl der Spieler extrem an, vor allem wenn viele kleine Pakete pro Sekunde verschickt werden (was normalerweise bei solchen Spielen der Fall ist). Kurzum ich denke bei Spielen die eine gewisse Anzahl von Spielern in einem "Raum" nicht überschreiten bzw. eine gewissen Menge an Paketen pro Sekunde nicht überschritten wird ist TPC gut, da leicht zu implementieren.. geht es aber um eine komplexe Kommunikation zwischen mehreren Spielern (wie oft in ein einem MMORPG Raid) kann ich TCP nicht empfehlen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 6 Stunden schrieb Zer0Cool:

Ich spiele gerade ein MMORPG das mit TPC programmiert wurde und die Netzwerkperformance ist unterirdisch und ich führe das zu großen Teilen auf TCP zurück. Vor allem in Raids gibt es hier massive FPS-Probleme, also wenn X Spieler in einer Gruppe kämpfen. Meine Vermutung ist dadurch das TCP sich alle Pakete bestätigen lässt steigt die Netzwerklast (und die CPU-Last) mit der Anzahl der Spieler extrem an, vor allem wenn viele kleine Pakete pro Sekunde verschickt werden (was normalerweise bei solchen Spielen der Fall ist). Kurzum ich denke bei Spielen die eine gewisse Anzahl von Spielern in einem "Raum" nicht überschreiten bzw. eine gewissen Menge an Paketen pro Sekunde nicht überschritten wird ist TPC gut, da leicht zu implementieren.. geht es aber um eine komplexe Kommunikation zwischen mehreren Spielern (wie oft in ein einem MMORPG Raid) kann ich TCP nicht empfehlen.

Ja kann an TCP liegen, aber muss nicht sein.

World of Warcraft benutzt auch TCP und da sieht man solche Probleme nicht, außer in Worst Case Scenario, wo wirklich sehr viele in ein Haufen sind. Das gleiche hab ich bei Guild Wars 2 auch gehabt, aber ich weiß nicht ob die TCP oder UDP benutzen.
Minecraft benutzt auch TCP. Minecraft lagt auch gerne bei schwachen Server, aber bei uns ging das mit 1000 Leuten damals mega gut.

Ich kann leider nicht einschätzen, wann FPS runter gehen könnte, weil ja das auch an Grafik liegen kann oder allgemein an die Behaviourscripte. Ich weiß z.B. von Black Desert, obwohl da viele nur standen hat es trotzdem gelaggt und bei Bosse war das schon wirklich sehr weit unten mit der FPS.

Bei TCP ist nur ein Schritt mehr als bei UDP und zwar die Bestätigung, dass etwas ankam, wenn nicht wird es wieder gesendet. RUDPs, wo es garantiert gesendet werden soll hat man ungefähr den selben Schritt. Wenn also jemand dich im Spiel schlägt, will man natürlich unbedingt so machen, dass du es mitbekommst. Im Endeffekt wäre man also bei der gleichen Sache, egal ob UDP oder TCP. Aber ist nur eine Spekulation. Vllt denken sich auch Entwickler, egal, wenn man ein Schlag nicht sieht, oder mal die Tür zu bleibt oder so.

Es gibt da verschiedene Arten wie man hier vorgehen kann. Beispiel Algorithmen wie Nagle, NoDelay, Cork können CPU Last erhöhen oder reduzieren. Dafür kommen die Daten langsamer oder schneller an bzw. die Verarbeitung ist schneller oder langsamer. Auch Größe des Pakets ist wichtig. Kann man nicht so große Daten senden, so müssen sie gesplittet werden.

In Mirror gibt es ein Benchmark, wo bei mir 4.500 Figuren rum laufen. Dort kann man testen, ob der CPU ausgelastet wird oder lags entstehen. Ich konnte das leider übers Internet nicht testen, da mein V-Server sehr schwach ist. Es schafft locker. Aber es ist halt kein realer Test, weil hier keine Effekte sind, keine Umgebung usw. Allerdings schafft unity da nicht mehr. So viele Figuren ist auch krass auf ein Fleck.

Zuletzt eigene Erfahrung. Ich hatte mal ein Spiel prototyped. Da das Spiel hat gelaggt sobald ich im Weltraum geschossen habe. Später hab ich gemerkt, dass es an Particle Effects lag.

Und hier sieht man sogar von mir selbst entwickelten Netzwerk System wo TCP benutzt wird. https://i.imgur.com/EU7gugy.gifv Dabei war es bei dem Gif noch nicht optimiert. 2000 Objekte zwischen ein server und zwei clients. Das wurde sogar auf einem v-server auch getestet. Man sieht kleinen Ruckler, aber das war der Editor selbst. Wenn da das Fenster kommt mit dem Spiel sieht man, dass es 60 fps hat.
Ich glaube Mmax hab ich 3000-8000 geschafft, aber das schafft Unity nicht. Selbst 2k ist schon etwas krass. Wenn da physic und so dabei wäre, wäre das nur am laggen. Da muss man ECS benutzen :D.

Aber das war halt mit Telepathy. Apathy soll ja 3x mal schneller sein weil es mit native C geschrieben wurde.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Archiviert

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

×
×
  • Neu erstellen...