Jump to content
Unity Insider Forum

Suche die passende Netzwerk-Lösung für mein Spiel!


Recommended Posts

Hallo zusammen,

 

ich bin seit ungefähr einem Jahr dabei mit Unity hobbymäßig meine eigenen Spiele zu erstellen. Das läuft auch ganz gut. Ich habe jedoch eine Spiel-Idee, die ich gerne umsetzen möchte. Die spielerische Umsetzung denke ich meistern zu können, jedoch gibt es ein Problem:

 

Es soll ein Online-Multiplayer Spiel werden!

 

Ich bin schon seit Monaten im Internet unterwegs und lese mich ein, jedoch stoße ich eher auf weitere Fragen, die ich mir bis dato nicht beantworten konnte. Daher wollte ich mal bei euch Profis nachfragen! ;)

 

Ok, erstmal zu meiner Spiele-Idee:

Das Spiel soll eine Städteaufbau/Wirtschaftssimulation werden. Es gibt mehrere Städte, in der jeweils mehrere Spieler zusammen eine Stadt aufbauen (nicht Simcity, eher in der Art wie Die Gilde).

Innerhalb einer Stadt und auch mit anderen Städten soll es ein Handelssystem geben.

Soviel zum Spielprinzip.

 

Jetzt die alles entscheidende Frage: In was für einer Netzwerkstruktur bekomme ich das am besten realisiert?

 

Ich habe Photon PUN ausprobiert, aber das ist eher was für kleinere Matches (Matchmaking, Lobbys etc.). Hier gibt es keine ständig laufenden Backend Server.

Fast identische Features bietet mir Mirror. Also wäre das auch nichts.

Ich habe mich ebenso bei Playfab eingelesen. Dies bietet mir schon mal die Möglichkeit die Player in einer Datenbank zu speichern und ich könnte eine VM für meinen Unity Server Build benutzen. Zudem ist es in der Entwicklingsphase meines Projekts kostenlos, was für ein Hobby natürlich nicht unerheblich ist.

Leider habe ich hier das Problem, dass ich nicht weiß, wie ich die ganzen Daten für die Städte, bzw. den Handel ablegen soll. Es gibt keine geeignete Datenbank in Playfab.

Brauche ich jetzt also noch einen weiteren Server, auf der eine vernünftige Datenbank läuft?

 

Meine aktuelle Idee wäre also:

 

Unity Client auf Android. Dieser kann sich bei Playfab authentifizieren und verbindet sich dann mit dem Server Build in Playfab.

 

Der Server Build ist zuständig für die gesamte Datenverwaltung (Lesen und Schreiben von Werten in der Player-Datenbank und der Städte-/Handelsdatenbank und dann zurück an den Client übermitteln). Ebenso denke ich, dass hier Simulationen für Bau- oder Transportzeiten durchgeführt werden sollten.

 

In dem Server Build findet nun also die gesamte Kommunikation mit einer Datenbank statt. An die Player-Datenbank in Playfab und an eine externe Datenbank (nur weiß ich noch nicht, wo ich eine passende finde).

 

Bin ich mit meiner Vorstellung auf dem richtigen Weg? Habt ihr andere Vorschläge, wie ich meine Spiel-Idee am besten online verwirklichen könnte?

 

Vielen Dank für eure Antworten. Bei Unklarheiten einfach melden! ;)

Link to comment
Share on other sites

Ja die Auswahl eines Network Solutions und Services ist schwierig.

Ich habe nicht ganz verstanden, was dein Vorhaben ist. Es ist gemischt erzählt. Anscheinend geht es dir eher um ein Service und nicht um eine Netzwerklösung, um Spielerdaten zu sammeln und Accounts zu managen. Sprich gibt es ein Server und dieser Spieler geht drauf, weiß das Spieler ahh das ist dieser Spiele.. ich kenne ihn und er hat hier und da gebaut. Weil alles andere, wie Daten senden, speichern oder so ist kein Problem für viele Netzwerk Systeme (außer vllt Photon, da es Cloud basiert ist und du wenig Einfluss hast). Selbst, wenn du nur Steamdienste benutzen würdest, reicht schon eine Speicherdatei um den aktuellen Zustand deines Spiel abzuspeichern und wieder zu laden, denn die Accounts kannst du ja leicht wieder erkennen. z.B. so macht das Factorio. Die speichern einfach ne Datei ab. Aber, wenn du echt Datenbank brauchst dann PlayFab oder Gamelift macht schon sowas. Dazu gleich mehr.

Alles andere ist der Frage des Netzwerklösungs.

Also ich bin ein "Experte" was Mirror angeht, da ich in verschiedenen Projekten angeheuert werde und dort Mirror benutzt wird und habe sehr viele unterschiedliche Situationen gehabt und ich selbst teste Mirror bis zu geht nicht mehr aus :D. Da sind sogar die alten guten Programmierer dabei wie fholm der Bolt (Photon Bolt) entwickelte und an Photon Engine verkaufte.
Beispiel das aktuelle Projekt woran wir arbeiten ist eine MMORPG in 2D und meine Aufgabe ist instanzierte Welten zu laden sprich.. die Spieler sind in der selben Stelle, aber sehen nicht die selben Dinge und sich nicht (je nach in welcher Instanz sie sich bewegen). Dank mehrere Scenen laden und entladen geht das durch Unity nochmal einfacher. Nun arbeite ich an Dungeon Generator. Alles mit Mirror.

Noch letztens habe ich ein Video gesehen, wo erklärt wurde Mirror sei zu "kompliziert" deswegen man Photon Pun empfohlen wird - Blödsinn. Auch, dass du sagst, Photon würde fast identische Features anbieten ist schon eine Beleidigung für die Community :D, denn viele wechseln von Photon zu Mirror und sind glücklich über die Entscheidung, weil sie dort ganz andere Dinge erwarten als bei Photon. Die meisten sind nämlich da abgeneigt. Photon ist Cloud basiert (das ist auch deren Basiseinkommen) während Mirror eher "mach was du willst - alles kostenlos" mäßig drauf sind. Klar ein paar Dinge können gleich sein, bei Bolt ist es Entity, bei Mirror NetworkIdentity, bei Photon photonview (wenn nicht anders geworden ist).

Photon wie du schon sagst, rate ich auch ab XD.

Mirror ist z.B. fähig sowas wie Anno 1800 zu machen. Mir fällt da was ein Aufbau angeht nur Nimoyd ein. Ist noch in Entwicklung (die mich auch per Email sogar kontaktiert hatten. Hab das per Zufall rausgefunden, dass sie das sind, da sie auch in Mirror Discord unterwegs sind :D). Leider wird über Mirror aber auch mal negativ gesprochen, weil es Nachfolger von UNet ist, aber inhaltlich hat sich das komplett geändert. 
Playfab hat auch für Mirror ein Tutorial: https://github.com/PlayFab/MpsSamples/tree/main/UnityMirror

PlayFab
PlayFab ist eher ein Dienst, dir dein Multiplayerspiel viel Arbeit abzunehmen. Sprich hast du bissel Multiplayer programmiert, geben sie dir mehr Optionen wie auf deren Server die Spiele zu hosten, Spielerdatenbank etc. Ist aber keine eigenständige Netzwerklösung (so weit ich weiß), sondern ein Dienst.

Man stelle sich das wie Battle.net vor. Als würde Battle.net neues Spiel rausbringen und im Hintergrund sind die ganzen Service bereits da. Chatten, Account System, Datenbanken usw.

Du kannst also Netzwerklösung plus Netzwerkdienst kombinieren. Deswegen haben die auch Tutorials wie z.B. das hier: https://docs.microsoft.com/de-de/gaming/playfab/sdks/photon/quickstart - Photon + Playfab.

Gamelift ist auch ein Service wie Playfab, aber von Amazon

PlayFab oder Gamelift ist echt bei riesen Spielen nice. Ein Beispiel als Vergleich: Rocket League.

Andere HLAPIs ich getestet habe waren Bolt, würde auch gehen, aber ist veraltet mittlerweile und die erlauben keine direkten IP Connection außer man zahlt mehr. Den aktuellen Netcode (Unitys Netzwerk) kannst du auch anschauen. Forge Networking kenne ich auch, aber bin mir da nicht so sicher.

DarkRift 2 hab ich auch probiert ist aber ziemlich low level api. Sprich du müsstest mehr coden kannst bei Mirror, Bolt usw. Dafür kannst du aber auch machen wie du willst. Das gute bei sowas ist, man kann Konsolenversionen erstellen.

Mehr fallen mir nicht mehr ein. Da ich viel mit Mirror mache sehe ich auch da vieles. Weil es auch starke unterstützende Community hat, entwickelt sich Mirror sehr schnell. Alleine dieses Jahr ist die Versionsupdate von 55 auf 66 gestiegen mit Erneuerungen.

Link to comment
Share on other sites

Am 17.6.2022 um 20:10 schrieb Sascha:

Fishnet ist ein Mirror-Fork, der um einiges besser zu sein scheint. Ist zwar immer noch mit Weaver, was ich nach wie vor beknackt finde, aber trotzdem nicht schlecht.

Interessant. Muss ich mir mal anschauen. Was ist denn an Weaver schlecht? Hab auch von Entwickler selbst gehört, dass sie vieles ändern wollen um dies zu reduzieren. Weil mehr Code erzeugt wird?

Ich vergaß zu sagen, dass auch noch Mirage gibt. Ist mir gerade durch dich eingefallen. Ist auch ein Mirror-Fork. Allerdings war es mir zu kompliziert, da die Guides veraltet waren. Dort gibt es auch paar Optimierungen wie z.B. Rückgabewerte, wenn man Commands durchführt (gibt es bei Mirror bis jetzt nicht) und die Namensvergebung ist auch besser. Das mit Rückgabewert war eigentlich einer der Gründe wieso ich Mirage probieren wollte: https://github.com/MirageNet/Mirage

Edit: Vom Kommentaren und Performance Tests sieht Fishnet tatsächlich besser aus. Muss ich mal selbst testen, ob es mir persönlich auch gefällt. Mirror wird zwar aktiv und schnell entwickelt und bin sicher, dass es besser wird, aber vieles an Mirror stören mich auch.

Link to comment
Share on other sites

Allgemein finde ich das Generieren von Code schlecht. Beim InputSystem bedeutet es redundante Daten und Code, der nicht mehr kompiliert, weil du etwas außerhalb des Codes verändert hast. Bei Weaver hast du halt ne Sprache mit X Features, die Weaver alle einzeln supporten muss, sonst fliegen sie raus. Ich wollte zum Beispiel eine abstrakte generische Basisklasse für Client Side Prediction haben und siehe da: Das kann Weaver gar nicht. Ich musste also auf Generizität verzichten, weil Weaver den Support dafür nicht zufälligerweise eingebaut hat(te).

Außerdem bin ich gegen Vererbung in Komponenten. Die übliche Argumentation. Ich hab mal einen Proof of Concept geschrieben, der 1a funktioniert (aber halt nicht annähernd production ready ist). Da sieht der Code dann so aus. Einfach Komponenten statt Vererbung. Komische Spezialsyntax von wegen "Cmd" oder "Rpc" entfällt dann auch.

Link to comment
Share on other sites

Schon mal vielen Dank für eure Antworten!

 

Ich sehe ein, meine Frage war etwas durcheinander, da ich irgendwie 2 Fragen und Themen in einem verhaftet habe.

Wie bereits erwähnt, ist das Thema Online Gaming für mich Neuland. Daher stelle ich mir als erstes die Frage: Wie kann ich das realisieren?

Und erst wenn das gelöst ist, sollte die Frage hinterher: Was gibt es und bietet mir die Features, das zu erreichen?

 

FRAGE 1:

Also zur ersten Frage „Wie kann ich meine Spiel-Idee realisieren?“, möchte ich noch einmal über meine Idee reden und dann kommen mir Fragen auf, was die Umsetzung angeht.

 

Wie bereits erwähnt soll es ein MMO-Aufbau/Wirtschaftssimulation werden. Ein Spieler meldet sich das erste mal an und wird in einer Stadt platziert, in der sich weitere Spieler befinden. Zusammen können sie die Stadt gestalten. Irgendwann ist diese Stadt mit Spielern voll und neue Spieler werden einer anderen Stadt zugewiesen, in der exakt dass Selbe Spielprinzip abläuft. Die Städte sollen später ebenfalls miteinander agieren können (Handel, Sabotage usw.)

 

Jetzt stellt sich mir die Frage, wo speichere ich die verschieden Daten sicher (anticheat) ab?

Zuerst kam mir eine Datenbank in den Kopf, da es viele verschiedene Variablen zu lesen und zu schreiben gibt, die permanent gespeichert werden sollen. Ich denke, diese Daten in einer Datei zu speichern und dann die verschiedenen Spieler und Städte etc. auseinanderzuhalten ist schwierig. Aber vielleicht irre ich mich auch.

Da ich aber bereits gelesen habe, dass der Zugriff vom Spiel-Clienten auf eine Online-Datenbank nicht manipulationssicher ist, da die IP zur Datenbank, sowie die verschiedenen Variablen direkt abgegriffen werden können, bräuchte ich etwas wo der Spieler keinen Zugriff drauf hat. Also irgendeine Art Dedicated Server.

Nun dachte ich mir, hierfür gibt es doch sicherlich den Server Build in Unity. Da kann ich bestimmt alles einbauen, was geschützt abgearbeitet werden soll. (Bau-/Forschungszeiten, Handel etc.). Und dann kommuniziert nur der Server Build mit einer eventuellen Datenbank. So hat ein „Cheater“ niemals Zugriff auf die sensiblen Daten. Der Client sendet einfach immer nur Anfragen (Baue Gebäude X aus) und der Server überprüft, ob es geht (Material oder Geld vorhanden?).

Soviel zu meinen Überlegungen. Aber vielleicht bin ich damit auch total auf dem Holzweg.

 

FRAGE 2:

Was gibt es und bietet mir die Features, das zu erreichen?

Während die erste Frage noch nicht darauf abzielte, nutze doch Datenbank XYZ und Server X oder Netwerkcode Z, so ist jetzt der richtige Zeitpunkt dafür gekommen.

 

Bei meinen Recherchen zu meinem oben erdachten Aufbau, bin ich halt auf playfab gestoßen. Hier dachte ich bis vor kurzem, dass es vieles meiner Anforderungen erfüllt:

-          Einfaches Login (auch Google Play Authentifizierung etc.)

-          Eine Datenbank für jeden Spieler

-          Erstellen von Gruppen (für Gilden, chats etc.)

Aber dein Vergleich mit Battlenet ist hier vielleicht wirklich zutreffender. Daher bezweifle ich jetzt, dass mir diese Spielerdatenbank wirklich was bringt. Zudem fehlen mir halt weitere Datenbanken für die Städte, den Handel etc.

Ebenso fand ich es nicht schlecht, dass man auf playfab seinen Server Build hosten kann.

 

Anno 1800 ist für mein Projekt leider kein passendes Beispiel. Hier hast du nur wenige Spieler, die eine abgeschlossene Partie spielen: Matchmaking, die Runde spielen und dann ist Ende. Raum und Server werden aufgelöst. Für mich wichtig ist, dass alles im Hintergrund weiterläuft.

 Es mag sein, dass du Mirror eher für den Umgang mit den Daten während des Spiels erwähnt hast. Vielleicht ist es auch genau das ,was ich brauche. Das kann ich leider noch nicht abschätzen, solange ich die Frage 1 noch nicht geklärt habe.

 

Nochmals Vielen Dank für eure Hilfe!

Link to comment
Share on other sites

vor 1 Stunde schrieb Michael S.:

Wie bereits erwähnt, ist das Thema Online Gaming für mich Neuland.

vor 1 Stunde schrieb Michael S.:

MMO-Aufbau/Wirtschaftssimulation

vor 1 Stunde schrieb Michael S.:

sicher (anticheat)

Dir muss nur bewusst sein, dass diese Kombination quasi nicht machbar ist. Du solltest das Projekt also auf jeden Fall locker angehen. Sei nicht überrascht, wenn es einige Monate, wenn nicht Jahre, dauert, bis da irgendetwas spielbares bei rumkommt. Was du dir da vorgenommen hast, ist alles andere als ein Anfängerprojekt. MMOs sind so ungefähr das schwierigste, was man sich vornehmen kann.

Aber davon abgesehen hier ein bisschen Wissen, einfach mal hingeworfen.

Multiplayer != Multiplayer

Du musst erstmal zwischen Echtzeit-Multiplayer und asynchronem Multiplayer unterschieden.

Echtzeit ist, wenn die Spieler sich gegenseitig beim Spielen sehen. Echtzeit-Strategie, Shooter, (MMO)RPGs, sowas. Für Echtzeit brauchst du eine Networking-Bibliothek wie Mirror, Photon, Fishnet und dergleichen. Diese Bibliotheken senden durchgehend Daten zwischen den Clients hin und her. Oft über einen Server, mit dem alle verbunden sind, oder alternativ "fast direkt" untereinander (Peer to Peer / P2P). Wenn du in deinem Spiel Echtzeit brauchst, dann musst du dich in eine solche Bibliothek einarbeiten, und allein das ist schon kein Anfängerthema mehr. Da bringst du hoffentlich schon eine gewisse Menge Erfahrung mit Spiele-Entwicklung im Allgemeinen mit.

Nicht jedes Spiel braucht aber Echtzeit-Unterstützung. Bei z.B. einem City Builder ist kein ständiger Austausch nötig. Weder zwischen Clients, noch mit dem Server. Hier sendet das Spiel einfach nur Anfragen an den Server und kriegt ggf. Antworten zurück. So wie dein Browser Anfragen schickt und dann z.B. eine Webseite zurück kriegt. Höchstwahrscheinlich sogar mit genau demselben Protokoll (HTTP(s)). Da schickst du dann "ich baue Gebäude 123 an Stelle X, Y" und der Server antwortet "jo, passt". Zwischen diesen Anfragen herrscht dann auch gerne Funkstille.

Backend-Server

Wenn du jetzt eine persistente, sich verändernde Welt haben willst (und wenn diese auch nur aus Inventaren der Spieler bestünde), dann brauchst du noch ein Backend. Also ein Extra-Programm, das zusätzlich zum eigentlichen Spiel geschrieben werden muss. Dieses Programm hat dann eine Datenbankanbindung, damit in dieser Datenbank die Daten der Welt gespeichert werden können. Nur, wenn du ein Spiel wie CS1.6 hast, wo nach eine Runde alle disconnecten und danach nichts mehr von der Runde gespeichert ist, dann braucht man so etwas nicht.

Wenn du also ein Spiel haben willst, wo mehrere Spieler sich gegenseitig in Echtzeit beim Spielen sehen und das in einer persistenten Welt, die sich verändern kann - dann musst du Echtzeit-Networking, HTTP-Abfragen (am besten mit sowas wie REST), Datenbanken und natürlich den ganzen Spiele-Basiskram beherrschen. Der Begriff "MMO" impliziert dabei noch eine hohe Spielerzahl, sodass du große Datenmengen und reichhaltigen Informationsaustausch hast. Du musst da also Performance optimieren und brauchbare Datenstrukturen aufsetzen können. Weil da einfach fast alles zusammenkommt, was man überhaupt über Spiele-Entwicklung wissen kann, sind MMOs einfach die Königsklasse.

Wenn du das aber durchziehen willst, und sei es nur zum Lernen, dann schau dir eine der hier genannten Echtzeit-Bibliotheken an und dazu noch UnityWebRequest für HTTP-Anfragen. Für den Backend-Server kannst du nehmen, was du willst. PHP ist so lala - man kann schon alles damit vernünftig machen, aber als Anfänger gibt es kaum eine Sprache, mit der man so leicht Fehler machen kann wie mit PHP. Um überhaupt erstmal irgendetwas zu haben, ist es aber sehr schön schnell und einfach.

Link to comment
Share on other sites

vor 13 Stunden schrieb Sascha:

Allgemein finde ich das Generieren von Code schlecht. Beim InputSystem bedeutet es redundante Daten und Code, der nicht mehr kompiliert, weil du etwas außerhalb des Codes verändert hast. Bei Weaver hast du halt ne Sprache mit X Features, die Weaver alle einzeln supporten muss, sonst fliegen sie raus. Ich wollte zum Beispiel eine abstrakte generische Basisklasse für Client Side Prediction haben und siehe da: Das kann Weaver gar nicht. Ich musste also auf Generizität verzichten, weil Weaver den Support dafür nicht zufälligerweise eingebaut hat(te).

Außerdem bin ich gegen Vererbung in Komponenten. Die übliche Argumentation. Ich hab mal einen Proof of Concept geschrieben, der 1a funktioniert (aber halt nicht annähernd production ready ist). Da sieht der Code dann so aus. Einfach Komponenten statt Vererbung. Komische Spezialsyntax von wegen "Cmd" oder "Rpc" entfällt dann auch.

Ist das bei dem beiden InputSystemen so? Sieht man auch im Code wenn man es decompiled? Ist mir nämlich nicht so wirklich aufgefallen.
Ja verstehe.

Ja versuche auch so gut wie möglich Vererbungen sein zu lassen. Mit Mirror konnte man das tatsächlich machen, aber man arbeitet dann gegen das Prinzip. Wir haben z.B. für den MMO Projekt ein Component nur für den Austausch der Daten was UI Messages angeht. 

Dein Proof of Concept sieht gut aus. Hast ja so ähnlich drin wie bei mir was Serialization angeht. Ich wollte bei mir aber viel mehr automatische Sachen haben. Ich benutze auch Expression in Runtime zu compilen, damit ich MethodInfo nicht Invoken muss. Leider weiß ich aber nicht, wie das bei anderen Plattformen aussieht. Allerdings ist das nur C# pure. Gar nicht mit Unity getestet, weil mir eher um das Lernen und Rumprobieren geht. 

Ich finde auch dein Beispiel gut. Das ist auch genau mein Geschmack. So mochte ich das auch bei der alten Unity Network mit Raknet. Dass ich den networkView nehmen konnte und damit ein Call ausführen konnte.

Zugegeben ich mag etwas den Weaver, da viel Arbeit abgenommen wird.

Ich hab mir jetzt Fishnet genau angeschaut. Tatsächlich finde ich da echt vieles besser gemacht. Leider ist da auch ein Object = ein Owner was ich bescheuert finde. Wieso dürfen nicht mehrere Clients Rpc senden ohne den Validation auszuschalten (authority bypass), denn am Ende muss ich meinen eigenen Validationsystem schreiben. Bei Mirror hatte ich dies modifiziert, damit das möglich ist und dann war im Core also möglich mehrere zu haben und wurde auch intern validiert, ob es möglich ist die RPCs aufzurufen.

 

Link to comment
Share on other sites

@Michael S. Wenn dir die Nebenunterhaltung zwischen MaZy und mir das Lesen schwerer macht sag Bescheid; ich trenne die Beiträge dann aus dem Thema heraus ;)

vor 8 Stunden schrieb MaZy:

Ist das bei dem beiden InputSystemen so?

Dass da Code generiert wird? Ist eine der verfügbaren Modi, der inzwischen immerhin nicht mehr der ist, der im ersten Tutorial empfohlen wird. Stattdessen kann man auch SendMessage (meh), C#-Events oder - mein Favorit - SO-Referenzen nutzen, um zu definieren, von welcher InputAction wir gerade reden. Als das neue InputSystem-Paket gerade neu raus war, war der einzige oder zumindest der erste empfohlene Weg, C#-Code generieren zu lassen und dann statisch darauf zuzugreifen. Das war das erste, was einem gezeigt wurde, und danach hab ich das Paket nicht weiter angeschaut damals.

vor 9 Stunden schrieb MaZy:

Dein Proof of Concept sieht gut aus.

Danke! Leider wird's gefühlt von meiner Seite aus dabei bleiben. Ist aber immerhin modular mit Transport Layer und Serialization Engine... und halt Open Source. Wenn da also jemand Potential sieht und es weiterführen will... :)

vor 9 Stunden schrieb MaZy:

Ich benutze auch Expression in Runtime zu compilen, damit ich MethodInfo nicht Invoken muss.

Klingt sehr interessant! Hast du da einen spürbaren Performance-Unterschied?

Link to comment
Share on other sites

Ich werde mein erwähntes Projekt nicht sofort in Angriff nehmen, es sollte nur als "Ziel" dienen, wo ich irgendwann mal hin möchte und in welche Richtung ich mich mit kleineren Testprojekten rantasten möchte. Wie du sagtest, Multiplayer != Multiplayer, daher erstmal die richtige Richtung einschlagen.

Es wird in dem Spiel keinen Avatar oder ähnliches geben, mit dem sich Spieler gegenseitig sehen können. Das ganze Spiel könnte theoretisch nur mit Texten und Menus abgebildet werden. Natürlich ist es hübscher, wenn man auch ein paar Gebäude in der Stadt sieht. Aber ich werde wohl keine Echtzeit-Lösung brauchen.

Ein Backend wird sicherlich notwendig sein und eine externe Datenbank zum Speichern der ganzen Daten. Was ich als Backend benutzen kann, muss ich jetzt noch herausfinden. Aber genau dazu noch eine Frage:

Kann man den Unity Serverbuild nicht als Backend nutzen? Diesen auf einen Server hochladen und die Anfragen vom Client direkt zum Serverbuild senden?

Ich weiß, dass bei Playfab ein sogenanntes Cloud Script (in JavaScript) genutzt wird, um auf die Playfab Datenbanken zuzugreifen. Playfab bietet aber ebenso die Möglichkeit einen Serverbuild laufen zu lassen. Jetzt muss ich nur herausfinden, ob auch der Serverbuild auf die Playfab Datenbank, bzw. dann auch auf eine externe Datenbank zugreifen kann, sodass ich das Cloud Script nicht mehr benötige.

Oder ist der Serverbuild für was anderes gedacht?

Link to comment
Share on other sites

vor 22 Minuten schrieb Michael S.:

Es wird in dem Spiel keinen Avatar oder ähnliches geben, mit dem sich Spieler gegenseitig sehen können. Das ganze Spiel könnte theoretisch nur mit Texten und Menus abgebildet werden. Natürlich ist es hübscher, wenn man auch ein paar Gebäude in der Stadt sieht. Aber ich werde wohl keine Echtzeit-Lösung brauchen.

Das macht das Vorhaben es definitiv um einiges realistischer. In dem Fall brauchst du keine Netzwerkbibliothek wie Mirror, sondern einfach nur HTTP(s)-Abfragen. Die kannst du mit UnityWebRequest senden. Das schaut man sich einmal an und dann läuft das. Herausforderungen sind dann eher, ein vernünftiges Anfrageprotokoll zu designen und das Backend zu schreiben.

vor 20 Minuten schrieb Michael S.:

Kann man den Unity Serverbuild nicht als Backend nutzen? Diesen auf einen Server hochladen und die Anfragen vom Client direkt zum Serverbuild senden?

Vielleicht kann man unter hinreichend starkem Drogeneinfluss tatsächlich einen Unity-Prozess hinter den Webserver schnallen, aber... ich würde dringend davon abraten :D

Insbesondere, da du gar kein Echtzeit brauchst. Dann bringt ein Unity-Prozess überhaupt keinen Mehrwert. Einfach ein ganz normales Backend mit einer beliebigen Webserver-Sprache/-Software bauen und gut is.

vor 25 Minuten schrieb Michael S.:

Oder ist der Serverbuild für was anderes gedacht?

Für Echtzeit-Multiplayer. Wie gesagt, ohne Echtzeit ist ein mit Unity erstellter Build auf dem Server völlig am Ziel vorbei.

Link to comment
Share on other sites

vor 7 Stunden schrieb Sascha:

Klingt sehr interessant! Hast du da einen spürbaren Performance-Unterschied?

Ich hab kein Test gemacht, aber ich weiß das MethodInfo zu Invoken ca. 100000x langsamer ist als ein Delegate. Mit System.Linq.Expressions kann man aber Delegates erstellen / "compilen", die sonst nicht möglich waren wegen den generic types. Somit werden die Serializer und Deserializer erstellt und für die RPCs die Delegates auch.

Ist noch nicht perfekt und kam auch nicht mehr dazu weiter zu machen, aber hatte da noch ein paar Ideen es zu verbessern.

 

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
 Share

×
×
  • Create New...