Hallo zusammen,
für mein Spiel-Projekt bräuchte ich mal ein paar Denkansätze, da ich aktuell merke, dass ich mit meinen auf Probleme stoße, sobald mehrere spielbare Charaktere zum Einsatz kommen.
Stell euch Dungeon-Räume und ein "Grid Based Movement" im Stil von "Zelda - A Link to the past" vor.
TopDown-Ansicht. Man bewegt sich mit WASD in die vier, jeweiligen Richtungen (nicht diagonal). Es gibt Kisten zum hin und herschieben, sowie Drehkreuze, Löcher im Boden etc.
Das funktioniert mit einem einzelnen spielbaren Charakter soweit auch alles, aber mit mehreren zwischen denen ich wechseln kann, wirds knifflig.
Aktuell "bewegt" sich mein Character immer 100 Units in die gewünschte Richtung per Timeline und SetWorldLocation. Um das Laufen zu simulieren, wird eine entsprechende Animation abgespielt.
Da es sich dabei ja um eine Art Teleportation handelt, muss ich entsprechend per LineTrace Collisionsabfragen machen, ob ne Wand, ne Kiste, ein Loch o.ä. im Wege steht und mein Char an die nächste Stelle laufen kann. Wenn dem so ist (Boolean-Abfrage), wird die entsprechende Richtungstaste quasi "blockiert".
Das selbe gilt für Blueprint-Actors, meine verschiebaren Kisten als Bsp. oder Drehkreuze, die bei ComponentOverlap meinem Char sagen, ob sie geschoben werden können oder nicht, wenn sie von irgendetwas blockiert werden. Z. Bsp. "BoxCheckNorth" und wenn der Wert True ist, wird beim Char "W" blockiert.
Diese Werte speicher ich aktuell temporär in einer GameInstance auf die meine Figur dann zugreifen kann.
Jetzt hätte ich aber gerne weitere Spielfiguren, zwischen denen ich jederzeit hin und her wechseln kann, damit sie sich gegenseitig helfen können, beim Kistenverschieben, Platz freiräumen etc.
Aber für diese Figuren brauche ich natürlich die selben Abfragen, ob in eine entsprechende Richtung gelaufen werden kann, oder die Kiste geschoben werden dann.
Ich suche nun hier irgendwie einen anderen Ansatz, anstatt für jede einzelne Figur lauter Boolean-Abfragen erstellen zu müssen, ob sie irgendwo hingehen kann oder etwas schieben kann etc.
Denn wenn für Figur A gilt, das "W" blockiert ist, gilt es ja nicht auch gleichzeitig für Figur B. Da ja für alle Figuren die selbe Steuerung gilt und sie auf die selben "BoxCheckNorth" ect. BooleanAbfragen in der GameInstance zugreifen. Und es sollen schon teils bis zu 4 Figuren pro Level spielbar sein, zu denen gewechselt werden kann...
Ein weiteres Problem: Jede Figur kann das selbe tun. Wenn Figur A eine Kiste schiebt, aber Figur B im Wege steht, muss die Kiste das erkennen, dass Figur B gerade nicht aktiv ist und als Hindernis ansehen und dies Figur A mitteilen. Womit ich bei den Collisionsabfragen weitere Möglichkeiten hinzufügen müsste..da PAWN ja für beide Figuren gilt. Denn wenn ich dann zu Figur B wechsel, muss diese dennoch in der Lage sein, die besagte Kiste auch schieben zu können, auch wenn sie vorher noch von der Kiste als Hindernis erkannt wurde.
Soo und als wäre das alles noch nicht genug, gibt es auch noch eine UNDO-Funktion. Jeder einzelne Schritt kann rückgängig gemacht werden.
Diese Funktion habe ich aber schon und sie funktioniert soweit auch schon, könnte mit weiteren spielbaren Figuren aber noch komplizierter werden
Mit einer einzelnen Figur ist es so breits schon komplett spielbar. Nur wie gesagt, mit mehreren würde dieses System so ohne weiteres nicht funktionieren...
Ich hoffe ich konnte ungefähr begreiflich machen, worum es mir geht. Dieses Grid-Based Movement sollte schon beibehalten werden, macht aber natürlich ohne NavMesh und typischem InputAxisMapping vieles komplizierter.
Wenn ihr Fragen oder Blueprints sehen wollt, sagt bescheid. Ansonsten hättet ihr ne Idee, wie sich das ganze eventuell etwas anders und einfacher umsetzen ließe?