Hi Leute,
nachdem ich jetzt längere Zeit "berufsbedingt" mit der UE arbeiten durfte, verbringe ich im Moment meine letzten Funken Freizeit mit Game-Design Überlegungen und "spiele" wieder mehr mit Unity rum. Dabei entstehen manchmal sogar sehr kleine Prototypen von für mich interessanten Konzepten die ich mir so ausgedacht habe bzw über die ich immer wieder mal nachdenke. Eines dieser, nur im Kopf und teils auf Papier existierenden, (Mobile)Spiele ist eine Art "Multiplayer Tower Defense" (wie Clash of Clans und andere Vertreter dieser Gattung).
Diese Idee ist jedoch das erste Konzept, welches massiv auf (non real-time) Multiplayer setzen würde, ein Gebiet in dem ich mich nicht wirklich auskenne (wenn nur theoretischer Natur).
Ohne jetzt zu genau über diese Idee sprechen zu wollen/können versuche ich mal ein wenig auf meine Topic-Frage zu kommen. Nehmen wir einfach mal als Substitutionsspiel Clash of Clans, einfach weil es vermutlich jeder kennt und viele in diesem Forum sogar mal gespielt haben könnten.
Also einfach mal als Gedankenspiel: Wir wollen Clash of Clans implementieren, eben mit Unity.
Wir brauchen eine Datenbank irgendwo im www, welche alle Nutzerdaten speichert, das wären z.B.
- Unique Spieler-ID
- Spielername
- Ressourcen
- Gebäudeplan
- Gebäude-Zeitplan (Gebäude X wird noch Y Sekunden geupdated)
- Standort
- Plattform
- ...
Bei Spielstart würde sich der Spieler dann bei einem Server melden und alle Daten abfragen, verschlüsselt, sicher, schnell.
Bei jedem Upgrade/Bau/whatever wird Meldung an den Server gegeben, Server entscheidet nun ob diese Aktion legal ist.
Wenn der Spieler nun eine feindliche Basis attackieren möchte, so schön dynamisch wie in CoC, so erhält er wiederum alle nötigen Informationen des gegnerischen Spielers vom Server (Gebäudeplan, Truppen, erbeutbare Ressourcen, ...)
Jetzt wäre ich unschlüssig wie ich vorgehen würde, entweder
- Kampf findet auf Client statt und das Ergebnis wird an den Server gesendet (und verifiziert: if(erbeuteteRessis > erbeutbareRessis) return )... oder
- Kampf findet komplett auf Server statt und lediglich der Spieler-Input wird an den Server gesendet. Client erhält Ergebnis.
- Client-side prediction: Beides geschieht parallel und es gibt einen Abgleich
- ?
Hier ist sicherlich zu beachten, dass wir das Spiel eventuell im Bus spielen, auf dem Nachhauseweg von der Dorfschule durch den dunklen Wald, Akku ist fast leer und die Verbindung ist instabil.
Man kann dieses Spiel noch ellenlang weiter führen, aber ich denke als Einleitung in meine Frage / in die Diskussion genügt das erstmal. Es soll wohl eher eine Diskussion sein, sicherlich kein "Sc4v du musst nur Network.DoAwesomeStuff(); callen
"
Also angenommen wir wollen Clash of Clans implementieren, eben mit Unity.
Welche Server, woher kommen diese, wie werden diese skaliert (10 versus 1Mio Concurrent Users). Wie speichert man die DB? Zentral, verteilt, whatever.
Gibt es hier schon Lösungen, auch speziell für Unity? (PUN, uLink, Amazon Cloud, whatever)
Würde vielleicht schon eine dynamisch skalierbare DB irgendwo im WWW (wo gibt es sowas?
) gehostet schon genügen, welche durch Server Code in einer Cloud angesprochen wird? Geht es besser?
Bereits gesagt, aber lieber nochmal wiederholt. Das hier soll kein Thread werden in dem ich euch ein AAAA mobile Game ankündigen will, welches ich im Moment implementiere, inklusive maßloser Selbstüberschätzung. Nein, ich spiele nur mit meinen Gedanken und will ein wenig darüber diskutieren, vielleicht ein paar nützliche Informationen erhalten und bestehende Wissenslücken stopfen (siehe skalierbare DB irgendwo im WWW).
Zu meinen Fähigkeiten: Ich könnte die Idee umsetzen, auf einem lokalem Server mit 3 Freunden laufbar machen und alles beschriebene auch implementieren... würde dann aber erschreckt feststellen, dass mein System nicht auf > 3 Spieler skaliert, geschweige denn auf 1 Mio CCU...
Schonmal Danke fürs Lesen und Wirken lassen. Ich bin dann mal weiter
Sc4v