Ich habe ein autoritäres System, bei dem der Spieler, wenn er sich dem Match anschließt, alle bereits gespawnten Objekte erhält - die auf sich selbst (dem Kunden) gespawnt sind.
Es sieht aus wie das:
Client
Sendet das Zugriffstoken an dieServer
Client
erhält die Annahme von derServer
Client
Schaltet die Szene zur Spielszene umServer
Sendet Spieler, Kisten und Objekte, mit denen Sie interagierenclient
können, damit sie erscheinen und angezeigt werden können.
Aber was ist mit dem Grundobjekt? Im Moment habe ich genau die gleiche Szene auf dem Server und dem Client - mit einer statischen Ebene, die als Etage fungiert. Momentan füge ich neue Dinge hinzu, Bäume, Treppen und baue Dinge zusammen.
Ich dachte - wir sind gut. Aber sollte die Umgebung nicht auch synchronisiert werden? Irgendwie vernetzt sein? Im Besitz des Servers?
Nehmen wir League of Legends
:
Es ist eine statische Umgebung, wahrscheinlich ein kombiniertes Geflecht (Treppen, Gras, Wände, Laden). Aber bleibt es wirklich auf dem Client oder wird es vom Server während des Ladevorgangs gesendet?
quelle
Antworten:
Nein, Kunstobjekte jeglicher Art werden nicht routinemäßig über das Netzwerk gesendet. Im Allgemeinen verfügen alle Clients lokal über dieselben Inhaltsressourcen. Möglicherweise gibt es Code, um sicherzustellen, dass dies der Fall ist, indem der Inhalt mit einer Prüfsumme oder ähnlichem versehen wird. Wenn Sie Bedenken haben, dass Benutzer einen Teil ihrer Inhalte clientseitig manipulieren könnten, können Sie ein ähnliches System implementieren.
Der Server sendet möglicherweise Anweisungen an den Client, die angeben, dass bestimmte Assets angezeigt oder ausgeblendet werden sollen, sendet jedoch nicht die tatsächlichen Daten des Assets. Dies ist in der Praxis zu verschwenderisch und zu langsam und kann bei Menschen mit begrenzten verfügbaren Daten zu echten Problemen führen.
In bestimmten Fällen können kleinere Assets in ihrer Gesamtheit gestreamt werden, wenn das Asset irgendwie als "Spoiler" betrachtet wird oder was auch immer. Aber das ist ungewöhnlich. Im Allgemeinen sehen Sie, dass ein Spiel möglicherweise neuen Inhalt von einem Patch oder was auch immer herunterlädt , dies geschieht jedoch nur einmal während des Patch-Vorgangs beim Start. Nicht während des Spiels.
quelle
Hängt von mehreren Faktoren ab, einschließlich der Art des Spiels (ich gehe davon aus, dass RTS hier ist, obwohl auch Open World MMO in den Sinn kommt). Ein lokaler Basis-Terrain-Status wird entweder bei der Verbindung gesendet oder ist Teil des Client-Assets. Stellen Sie sich ein RTS-Spiel vor, bei dem die Karte entweder mit dem Client ausgeliefert oder vor Spielbeginn heruntergeladen wird.
In der Tat würde das Mesh normalerweise nicht gesendet, da es sich in den meisten RTS-Fällen bereits auf dem Client befindet. Eine andere Frage ist, ob die Kollisionskarte gesendet wird, die für die Synchronisierung der beiden Karten von entscheidender Bedeutung ist. In den meisten RTS wird dies jedoch wieder auf dem Client gespeichert.
Es hängt also wirklich davon ab, womit Ihr RTS ausgeliefert wird, ob Sie die Karten vor dem Spielen herunterladen oder zu dem Zeitpunkt, zu dem das Spiel beginnt.
Danach gibt es einige typische Möglichkeiten, um synchron zu bleiben:
quelle
Was Ihre genaue Frage betrifft, so weiß ich nicht, wie League of Legends speziell damit umgeht. Ich habe dieses Spiel noch nie gespielt, daher kann ich nicht vorschlagen, ob es nötig ist oder nicht.
Die Antwort auf Ihre Frage ist im Allgemeinen recht einfach und unkompliziert:
Wenn die Daten statisch sind und Sie sicher sind, dass sie sich nie ändern werden (abgesehen von regelmäßigen Updates für das gesamte Spiel, die jedoch separat sind), warum sollten Sie dann jemals diese zusätzlichen Daten senden? Normalerweise versuchen Sie zu vermeiden, dass etwas gesendet wird, was vermieden werden kann. Senden Sie Daten nur, wenn diese Kommunikation erforderlich ist .
Auf der anderen Seite, wenn die Daten der Zeit ändern werden , oder wenn Sie nur auf diese Option offen lassen wollen, dann haben Sie wirklich keine Wahl in der Angelegenheit? Für diesen Fall Sie müssen die Daten senden. Ansonsten hat der Kunde nicht das, was er braucht.
Dies gilt für die gesamte Netzwerkkommunikation, nicht nur für Geländedaten. Alles .
quelle
Nein.
Ich habe einiges darüber getan, wie man in der Quelle von League of Legends herumgräbt, und alles, einschließlich Championmodelle, Ladenbesitzer, allgemeinem Kartenhintergrund und nachträglich hinzugefügten Flaumkreaturen (wie das kleine Eichhörnchen auf einigen Steinen und eine Schnecke in der Fluss) werden auf der Client-Seite gehalten. Die Tatsache, dass der Client alle diese Modelle hat, ist einer der Gründe, warum LoL viele Gigabyte groß ist.
Das Übertragen all dieser Daten vom Server zum Client wäre höllisch, ganz zu schweigen von der Bandbreitennutzung, um im nächsten Spiel alles noch einmal zu machen.
Wie wird es dann gelöst? Jeder Spieler sendet NUR die Daten, die für andere Spieler im Spiel von Bedeutung sind, an den Server. Niemand muss wissen, ob noch 5 Sekunden für die Abklingzeit von Q zur Verfügung stehen oder ob die Deep Terror Thresh Skin Blasen für Sie erzeugt. Dinge, die im Spiel weitergegeben werden, sind Dinge wie: Vel'Koz hat Q gewirkt, Viktor ist nach links gegangen, etc ...
In Bezug auf den Ladebildschirm, den Sie angesprochen haben, gibt es Dinge, über die jeder Spieler mit den Servern von Riot sprechen muss, bevor das Spiel beginnt, Handshakes für sichere Verbindungen und Anti-Cheating-Protokolle.
HINWEIS:
Wenn Sie sich umschauen möchten, über welche Inhalte der Client verfügt und der Server Sie daher nicht weiterleitet, suchen Sie den Ordner C: \ Riot Games \ RADS \ lol_Game_Client \ Projects. Ich arbeite gerade am Speicher und finde einen .RAF-Datei-Entpacker online. Dann können Sie alles sehen, was sich vor Ort befindet, wie z. B. das Laden von Bildschirmspritzern und Hautstrukturen, sogar von Champion-Skeletten.
quelle
Ein Beispiel dafür, wo dies nicht getan wurde, war Elder Scrolls Online, wo dem Kunden die Höhe des Bodenniveaus anvertraut wurde .
Goldgräber fielen mehrere Fuß in die Tiefe. Sie konnten dann "unter" dem Gelände herumlaufen und Ressourcen von unten abbauen, ohne von PCs gesehen oder von NPCs angegriffen zu werden.
Ähnliche Bearbeitungen ermöglichten es ihnen, Klippen zu glätten, damit sie sie hinaufgehen, sie entfernen oder unter statischen Wänden hindurchführen, alle statischen Objekte durchsehen usw.
Im Wesentlichen vertraute der Server dem Client in Bezug auf den Standort des Spielers, und die Berechnung der Kollision auf der Serverseite für jeden einzelnen Spieler gegen alle statischen Werte wäre ziemlich schwierig.
In Tile-basierten Spielen wie Furcadia ist dies jedoch anders: Jedes Feld, in das Sie sich bewegen, ist serverseitig begehbar, und der Server muss dem Client in keiner Hinsicht vertrauen: Der Server kennt und validiert jede Bewegung und Benutzeraktion und Der Client zeigt die Aktion nur an, wenn der Server das Ergebnis mitteilt.
quelle