Neues Projekt neu Versuchen

  • Moin,


    ich hab vor ein paar Tagen weiter an meinem Projekt vom Juli gearbeitet und mittlerweile denke ich es wäre eine gute Idee das Projekt neu zu starten.

    Da ich in der erste Version einfach erstmal nur "Versucht" habe wie ich Sachen machen kann, ist das ziemlich durcheinander geworfen.

    Töte und dopplete Variablen, hin und her geschobene Functionen etc. als sehr unschön. Zumal die erste Version auch eine Singleplayer Version war die ich zum Multiplayer umbauen wollte.


    Denke daher ein Neustart direkt als Multiplayer, wo ich auch Schritt nach Schritt vorgehe und nicht mitten drin oder am Ende was bastel, logisch.


    Habe aber immernoch Probleme die unterschiedlichen Blueprint Kategorien zu verstehen.


    PlayerController, PlayerState, GameMode, GameState, GameInstance etc.


    Player Controller verstehe ich schon noch, damit steuert man seinen Charakter.

    PlayerState benutzt man wohl für Level bezogene Daten. Z.B. Leben, Ammo, Punktestand etc.


    GameInstance wohl Levelübergreifend z.b. in Super Mario würde man die Leben so speichern.


    1. Da hört es aber schon so ziemlich auf. GamMode ist wohl nur einmal auf dem Server existent?

    2. Wozu brauch ich GameState?

    3. Warum kann ich Dinge die in PlayerState speichere nicht einfach im PlayerController Speichern?

    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.

    5. Gibt es einen davon wovon der Server immer weiß? Sprich ich nichts replicaten muss zu anderen Spielern oder dem Server?

    6. In welchem Blueprint spawne ich was? z.b. meine Handkarten würde ich worüber spawnen? Macht das einen Unterschied?



    Habe mit natürlich schon was dazu ergooglt, aber gefühlt werden überall die selben Beispiele benutzt und ich raff das irgendwie nicht so ganz. :D

  • Töte und dopplete Variablen,


    na das versteh ich an der ganzen sache nicht. hab ich noch nie gemacht.^^


    ja wenn du gleich auf multiplayer machst ersparst du dir auf jeden fall die programmierung eines bots. für den anfang wäre es bestimmt auch leichter einen lokalen multiplayer zu machen mit dem du die funktionen testest. und server aufsetzen dann erst wenn alles halbwegs fertig ist.


    ich würds als fraglich erachten wie sehr du playerstats bei einem kartenspiel brauchst oder ob du nicht vieles auf der map mitlaufen lassen kannst. wär vielleicht die frage wie bald du eine spielerstatistik anbieten willst, oder ob es nur um einzelne runden immer geht.


    das kartendeck würde ich auf jeden fall als inventar behandeln.


    vielleicht brauchst du gar nicht so viele bp klassen. ich hab mir das puzzle template auch noch nicht angeschaut, bist du dir schon sicher, dass es das beste für ein kartenspiel ist? ich würd auf jeden fall noch nach tuts suchen und schauen wie die das in so einem fall anordnen.

  • Töte und dopplete Variablen

    Kann mich da Feal nur anschließen. Wie kann man Variablen doppelt vergeben? In der Regel bezeichnet man sie sehr aussagekräftig und eigentlich weiß man doch in seinem Projekt wofür sie da sind.


    Wenn du etwas ausprobierst, dann probiere es doch auch in einem zweiten Projekt aus. Wenn es dann gut funktioniert, übernimm es in dein Hauptprojekt. Sonst zerschießt du dir früher oder später dein Hauptprojekt immer wieder.


    Mal abgesehen davon kannst du Funktionen, solange du mit BPs programmierst immer wieder gut löschen und neu machen, wenn so ein tiefgreifender Einschnitt dann überhaupt notwendig ist. Weil, das ist ja der große Vorteil bei BPs. Die Nodes kannst du extrem leicht austauschen und neu verkabeln und so weiter. Schwieriger ist es da schon mit C++. Wenn du da irgendetwas nicht mehr von benötigst, ist es schon wesentlich umständlicher um die Datei aus dem Projekt zu entfernen. Da musst du dann in den Windows-Explorer, entsprechende Dateien löschen, Projekt neu aufbauen usw. und das alles in der richtigen Reihenfolge etc. Aber bei BPs sollte das alles kein großes Problem sein. Zumindest bei den jetzigen Versionen der UE-Engine, es gab alte Versionen wo der Contentbrowser einen eigenen Kampf gegen den Programmierer geführt hat, aber das hatte ich in letzter Zeit schon lange nicht mehr.

  • Wie gesagt war halt nur eine Version um Unreal Engine zu lernen, es war nie das Hauptprojekt. Damit hab ich noch gar nicht angefangen.


    Da ich am Anfang Fehler gemacht habe und Sachen von einem Blueprint ins andere verschoben habe, gab es halt Variablen die ich halt nicht nicht mehr nutze oder in unterschiedlichen BP's gleich heißen.

    War mir damals halt nicht wichtig weil es nicht schön werden muss. Mittlerweile verliere ich halt dadurch die Übersicht.


    Geht mir nicht darum ob etwas sinn macht wie z.b. PlayerStats zu haben sondern wie man das am Sinnvollsten machen würde bzw. wieso man da dort und nicht woanders macht.




    Was meinst du mit Inventar? Also nicht mit der GameInstance?



    Welches Puzzle Template?



    Es bringt mir nichts das ich Sachen in Blueprints einfach löschen kann ohne Probleme, wenn ich nicht mehr genau weiß was diese machen.








    Könntet ihr einfach dir 6. Fragen am Ende beantworten? Ihr weckt in mir nur weitere. xD

  • also das mit dem puzzle template war wegen einem anderen forenbenutzer, da hab ich dich verwechselt, weil er auch ein kartenspiel macht.


    ein link zur projektvorstellung wär auch nicht verkehrt.


    also ein inventar kann man jedenfalls nicht nur bei gameinstance einordnen, es braucht das meistens, aber ich hab auch von anderen möglichkeiten gelesen. du müsstest dich wahrscheinlich noch ein wenig mehr einarbeiten und dann genauer beschreiben wofür du die classes brauchst, damit man dir entschiedenere antworten geben kann.


    1. da bezeichnet im wiki server eine partie, die class gibt die regeln vor.

    2. da müsstest du dich entscheiden wie viel du in dieser oder in anderen classes haben willst.

    5. versteh ich nicht.

    6. bei bestimmten spielen wäre es sinnvoller das deck zu spawnen und dann nur mehr eine anim drüber zu machen.


    toi toi toi!

  • 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.