Hey zusammen
1. Da hört es aber schon so ziemlich auf. GamMode ist wohl nur einmal auf dem Server existent?
Ja, der existiert nur einmal und zwar auf dem Server. Der ist dazu gedacht, grundlegende Regeln zu implementieren. Etwa wie viele Spieler die Runde erlaubt, wie und wann ist Spiel vorbei oder gewonnen etc. Der GameMode wird bei jeder Runde zurückgesetzt.
2. Wozu brauch ich GameState?
Unter umständen musst du Daten zur Akuellen Spielrunde speichern. Zum Beispiel ob die Runde schon begonnen hat oder wie lange diese schon läuft oder deine spezifischen Daten, die nicht auf einen Spieler bezogen sind (In Battlefield zum Beispiel die Tickets). Im Gegensatz zum GameMode, können alle Spieler auf den GameState zugreifen. Wird bei jeder Runde zurückgesetzt.
3. Warum kann ich Dinge die in PlayerState speichere nicht einfach im PlayerController Speichern?
Der PlayerController representiert den "Willen" des Spielers. Jeder Spieler hat also einen PlayerController. Im Multiplayer hat jeder lokale Spieler aber nur Zugriff auf seinen eigenen PlayerController, also nur einen. Das ist ein Problem, denn was machst du jetzt mit Daten, auf die alle Spieler zugreifen sollen? Wie zum Beispiel der Name des Spielers, wie oft der gestorben ist etc. Mit dem PlayerState kannst du diese Infos ganz einfach mit allen Spielern teilen weil dieser im Gegensatz zum PlayerController an alle Spieler repliziert werden. Beides wird bei jeder Runde zurückgesetzt, bleibt aber über den Tot des Pawns bestehen.
4. In meinem Spiel muss ich z.b. ein "Deck Karten" im Menü auswählen und das ins Game übertragen das wäre dann ja GameInstance.
Die GameInstance ist Sinngemäss das Spielfenster oder der Prozess. Im Grunde die Instanz des laufenden Spiels, er wird erstellt wenn das Spiel gestartet wird und erst wieder gelöscht wenn es geschlossen wird. Deswegen werden Daten darin gespeichert, die über die gesamte Dauer, bis zum schliessen des Spiels ,behalten werden müssen. Das kannst du also so machen, es gibt aber auch andere Weg die Daten von einem Level in das nächste zu kopieren.
5. Gibt es einen davon wovon der Server immer weiß? Sprich ich nichts replicaten muss zu anderen Spielern oder dem Server?
Der Sever weiss immer von allem, er wiederspiegelt den einzig "wahren" Zustand des Spiels. Ich habs oben schon beschrieben.
Nur der Server hat den GameMode, alle haben den GameState. Die Clients haben nur den eignene PlayerController, haben aber alle PlayerStates. Die GameInstance existiert nur einmal.
6. In welchem Blueprint spawne ich was? z.b. meine Handkarten würde ich worüber spawnen? Macht das einen Unterschied?
Das darfst du selber entscheiden Persönlich würde ich in einem Kartenspiel nur die Kartendaten replicaten, also wer welche Karten besitzt. Wenn die Karten offen sind würde ich das als Array im PlayerState machen, wenn nicht vermutlich im PlayerController. Viele würden vermutlich aber den Pawn nutzen. Ich würde einen eigenen Actor "Spielebrett" machen. Dieses nimmt das Karten Array von den Spielern entgegen und stellt diese dar. Der Lokale Spieler ist dadurch immer am selben Ort. Bei jedem Update soll das Spielbrett dann aktualisieren. Meine Begründung dafür wäre, dass ich weniger Daten über das Netz senden muss und den Rest, sound, effekte etc. einfach lokal machen kann und mich nicht weiter um Networking / lag kümmern muss. Aber das kannst du machen wie du willst.