Beiträge von AceD

    da würde ich dir glatt das Kostenlose A Boy and His Kite empfehlen, da sind sehr schöne umsetzungen drin, von überlappenden Bodenübergänge zu bis hin zu eine Fooliage spawner der logisch vorgeht und nicht zu vergessen die ganzen Texturen/Materialien.Ansonsten habe ich mich auf den Marktplatz noch nicht wirklich umgeschaut da es mir viel zu Teuer ist und ich es mir lieber selber zusammenbastel, vllt werde ich aber Montag mal drüber schauen.


    PS:

    Ich weiß jetzt nicht was dieses System alles kann aber wie oben geschrieben bin ich eher der Meinung das selbstgemachtes besser ist, habe gerade das Tutorial hier gefunden und vllt ist das ja auch was für dich

    Externer Inhalt www.youtube.com
    Inhalte von externen Seiten werden ohne Ihre Zustimmung nicht automatisch geladen und angezeigt.
    Durch die Aktivierung der externen Inhalte erklären Sie sich damit einverstanden, dass personenbezogene Daten an Drittplattformen übermittelt werden. Mehr Informationen dazu haben wir in unserer Datenschutzerklärung zur Verfügung gestellt.

    Danke!
    Japp, A Boy and his Kite bzw. Open World Demo Collection habe ich schon.
    Ich überlege mir noch das Procedural Nature Pack Vol.2 zu holen. Hab auch schon Vol. 1, welches ich zwar noch nicht viel genutzt habe, aber finde es schon recht praktisch und Vol. 2 hat schon recht geile Sachen mit Schnee, Eis und Wind-Effekten und nen Tree-Generator. Sowas würde ich selbst alleine nie im Leben hinbekommen 8o


    Das mit dem Save System werde ich erstmal weglassen. Aktuell bin ich eh noch an einem anderen Projekt dran und vor nächstem Jahr werde ich mit meinem RPG-Projekt auch nicht anfangen. Hat also noch Zeit :)

    Moin zusammen,


    wusste nicht genau in welchen Bereich damit, daher erstelle ich es mal in "Allgemeine Diskussion" aber in den News hätte es sicherlich auch gepasst.
    Diesen Montag am 27.11 findet von 12:00AM bis 11:59PM ET im Unreal Marketplace der Cyber Monday Sale statt mit Rabatten bis zu 90%!


    Man weiß zwar noch nicht, was rabattiert ist, aber hättet ihr Vorschläge was für RPGs, OpenWorld Spiele ganz nützlich sein könnte? Ruhig aus allen Bereichen, vor allem Fooliage, Landscape, Materials etc.
    Rama's Save System könnte auch hilfreich sein oder?

    alle buttons sollen bei OnPressed das selbe machen und da wollte ich meinen blueprint code etwas abkürzen und übersichtlicher gestalten. ein egal-welches-widget OnPressed event wäre nice gewesen.

    Also so ganz folgen kann ich dir noch nicht... :) Was soll denn passieren durch den OnPressed-Event? Wird ein neues Widget geladen oder ein Level geöffnet (wegen "NewGame" bzw. "LoadGame") etc.?
    Die Buttons LoadGame und NewGame befinden sich im selben Widget. Da können sie auch das selbe machen dann...
    Und "WhatButton" erfährst du doch erst, wenn du ihn gesetzt hast:

    hallo und danke für deine hilfe. hmm also IsMouseButtonDown braucht ja eine pointer event structure und an die komm ich vom OnPressed event aus gar nicht ran?? ich glaub das beste wird für mich sein, ein custom widget zu erstellen.


    zu 2. ich hab rausgefunden wie das funktioniert, die implementierung stimmt mich aber nicht zufrieden. noch ein weiterer grund für mich ein custom widget zu erstellen. dort kann ich dann gleich die hoch/runter etc. tasten abfragen und als parameter zusammen mit meinem custom event abschicken.

    Wie gesagt, kannst auch einfach "IsInputKeyDown" nehmen. :)

    Du könntest folgendes versuchen: In deinem Level einmal in die WorldSettings gehen --> Game Mode --> Default Pawn Class auf "None" setzten.
    Den Character im Level wieder löschen.
    Dann wählst du die im Level plazierte Camera aus und öffnest den Level-Blueprint.
    Dort bei EventBeginPlay, rechte Maustaste und Create a Reference to "deineCamera" anklicken. Dann erstellst du ein SetViewTargetWithBlend-Node.
    Bei Target den GetPlayerController verbinden und bei NewViewTarget "deineCamera" anschließen.
    Wenn du nun das Spiel startest, solltest du den Blick aus deiner Kamera haben und keinen Character im Level haben.


    MFG
    AceD

    1.) ich war überrascht zu sehen, dass ich von haus aus mit meinem xbox gamepad zwischen den widget buttons navigieren kann. standardmässig wird beim drücken des A knopfs auf meinem xbox controller das widget ausgeführt. gibt es eine möglichkeit das zu ändern? ich würde gern beim drücken des X knopfs ein widget ausführen und beim drücken des B knopfs ein anderes.


    2.) wenn ich nach unten drücke und zum letzten widget navigiere, passiert nichts wenn ich nochmal nach unten drücke. wie kann ich wieder zum obersten widget springen?


    3.) kann ich beim widget button OnPressed event irgendwie unterscheiden, ob das event durch einen mausclick oder durch das gamepad verursacht wurde?

    zu 3) Du könntest mit "IsMouseButtonDown" abfragen, per Branch, ob zum Beispiel der Linke Mouse Button gedrückt wurde, wenn True, dann war es die Maus, wenn nicht (False), dann war es (vermutlich) wohl der Controller. Das selbe funktioniert auch mit "IsInputKeyDown".

    Warum machste denn kein Array? Das was du willst ist doch ein Schachbrett in beliebiger Größe. Davon erstellst du meinetwegen 10 Stück und kannst so auch dein Undo machen.


    Im Array gibst du Variablen an. B=Blocked, F=Frei, K=Kiste. Dann kannste alles abfragen, was du willst und Multiplayer klappt damit ja auch. Schach halt oder jedes andere Brettspiel.

    Bisher klappt es nun, so wie ich es gemacht habe. Meine Level sind nicht alle Quadratisch und haben unterschiedliche Formen. Hätte aber wohl dennoch mit der Schachbrett-Methode funktioniert irgendwie.
    Ich belasse es aber nun erstmal dabei :)

    Verstehen tue ich die Logik hinter objektorientierter Programmierung und Parent Child Beziehungen, nur in meinem Fall funktioniert es nicht.
    Parent Child BPs benutze ich zur Zeit aber auch nicht.
    Ich habe mehrere KistenTypen, sowie mehrere Duplikate dieser pro Level. Wobei das von Level zu Level auch variiert.
    Um die Variablen einer bestimmten Kiste herauszubekommen, müsste ich erst deren Class bestimmen, zu dieser casten und dann das Objekt (die ausgewählten Kiste) bestimmen. Das ganz kann ich per LineTrace herausbekommen ja.


    Aber ich kann die Variable selbst nicht auswählen, solange nicht überhaupt gecastet wurde, da ich das Target nicht bestimmen kann, solange die Actor Class nicht definiert wurde im Editor und die Class und Object würde aber so erst InGame bestimmt.
    Aktuell habe ich 13 verschiedene KistenTypen.
    Ich will ungern proforma bei jedem Schritt, den einer meiner Figuren macht, oder per EventBeginPlay zu sämtlichen dieser Typen casten für den Fall, dass ich dann irgendwann auf eben eine Kiste, von einer dieser KistenTypen treffe, um dann deren Variable auslesen zu können...
    Alles was jede Kiste, egal welche, machen muss, ist meiner Figur mitteilen, ob in die gewünschte Richtung geschoben werden kann. Dazu habe ich vier Boolean-Variablen (North, South, East, West), welche ich nun nach meiner Logik her :D in die GameInstance gesetzt habe.
    Die Kiste sagt North geht nicht, Controller überprüft North in der GameInstance und merkt "Ok, nach North kann nicht geschoben werden" und "blockiert" die W-Taste.


    Wäre doch die einfachste Methode oder nicht?
    Was allerdings noch nicht funktioniert, wenn ich zwischen zwei Figuren wechsel. Steht Figur1 im ComponentBeginOverlap einer Kiste und ich wechsel, werden in der GameInstance sämtliche Werte auf False zurückgesetzt, damit Figur2 auch in jede Richtung laufen kann, falls die Kiste Figur1 vorher gesagt haben sollte, nach North gehts nicht und den Wert auf True gesetzt hat.
    Wechsel ich jedoch dann erneut zurück zu Figur1, muss diese eine Kiste irgendwie erneut die Abfrage ausführen, um den North-Wert wieder auf true zu setzen, da Figur1 sonst einfach weiterlaufen würde...


    Edit: Ok, ich glaube, ich brauche hier noch ein BlueprintInterface. Damit kann ich dann das per LineTrace abgefragte Objekt überprüfen und so im Objekt_BP bei Bedarf ne Funktion auslösen...

    Also wenn ich Kiste1 in meinem Level plaziere und diese dann dupliziere, Kiste2. Dann hat/nutzt Kiste2 den Blueprint von Kiste1.. oder nicht? Wenn ich im Blueprint von Kiste1 etwas ändere, wird es ja auch direkt auf Kiste2 übertragen. Im LevelBP kann ich zwar Referencen zu beiden Kisten erstellen und dann auf Funktionen/Variablen zugreifen, aber im PlayerController könnte ich jedoch nur zu Kiste1 casten, jedoch nicht zu Kiste2, wenn ich das richtig verstehe.
    Bleibt eigentlich nur noch die GameInstance dann, mit Variablen etc. auf die sowohl jede einzelne Kiste als auch mein PlayerController zugreift um die selben Variablen gemeinsam nutzen zu können oder?


    Alle Spieler greifen auf die selbe Logik zu und wenn eine Kiste geschoben werden soll dann sagt dir die Kiste was sie kann und was nicht.
    Die States der Kiste kannst du dann in der Steuerung vom PlayerController einbinden.

    Das scheint nicht so ganz zu funktionieren... Es kann vorkommen, dass ich pro Level mehrere Kisten habe, welche im Level lediglich dupliziert werden, also den selben Blueprint abgreifen.
    Ausserdem gibt es dann noch zusätzlich verschiedene Kisten-Typen, bzw. varieren sie in der Größe. Ich denke ich bräuchte hier also eine Art Parent-Blueprint, wenn ich das richtig sehe und alle Child-Kisten (egal welchen Kisten-Types) senden ihre Stats an diesen einen Parent, welche dann wiederum in die Steuerung vom PlayerController eingebunden werden müssen. Und es sollte dann nur für die jeweilige, gerade aktive Kiste und die gerade aktive Spielfigur gelten...
    Wäre das so in der Art machbar?

    Ich würde die Spieler Logik im Player Controller schreiben.
    Alle weiteren Infos zu Objekten in den Objekten deponieren also ganz normal Objektorientiert und dann mit dem Spieler auf das Objekt zugreifen.


    Alle Spieler greifen auf die selbe Logik zu und wenn eine Kiste geschoben werden soll dann sagt dir die Kiste was sie kann und was nicht.
    Die States der Kiste kannst du dann in der Steuerung vom PlayerController einbinden.


    Denke das sollte reichen, ich mach es aktuell so in meinem Projekt und das funktioniert recht gut

    Danke für die Antwort!
    Hm würde bedeuten ich müsste sämtliche Functionen und Variablen die ich bereits im Player Character gemacht habe, im Controller neu erstellen oder?
    Den Inhalt kann ich natürlich dann rüberkopieren. Aber dennoch müsste ich sie erstmal alle erstellen dort oder nicht?

    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 :D
    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?

    Okee, zurück im alten Account UND ich habe den Fehler gefunden. :D


    Ich hatte in meiner GetSelectedButton - Function (siehe Post davor) im Parent für mein ForEachChildWidget-Makro schlicht das falsche Target.
    Mein RadioButtonLine_BP besteht aus einer Horizontalen Box und darin befinden sich zwei Vertikale Boxen. Jeweils eine Box für die Buttons 1-5 und die daneben für die Buttons 6-10.
    Als Target habe ich jedoch die äußere, horizontale Box genommen. Da ist natürlich dann klar, dass er darin keine und vor allem nicht den selektierten Button findet und mir somit immer nur 0 ausgibt! :)
    Jetzt funktioniert es aber. Das System ist noch nicht perfekt und ich muss noch etwas dran feilen, aber erstmal bin ich damit zufrieden!
    Vielen Dank für Eure Hilfe!


    Ich werde das Projekt, wenn ich vorran komme wie gewünscht, dann hier auch noch im Game Design Bereich vorstellen. Nur aktuell möchte ich da noch nichts genaueres zu sagen :)

    Hi,


    ok folgendes könnte recht lang und kompliziert werden. Ich versuch es möglichst genau zu erklären und wo mein Problem liegt.
    In meinem In-Game Hauptmenü werden sogenannte RadioButtons erstellt. Für jeden im SaveGame gespeicherten Floor (meine Level) wird ein Button erstellt. Kommt ein neuer Floor hinzu, wird auch entsprechend ein neuer Button im Menü dazu erstellt. Was soweit auch schon mal funktioniert.
    Jeder Button soll dann den entsprechenden Floor laden, wenn man draufklickt.
    Dazu muss ich den Index des angeklickten Buttons auslesen, um diesem Index den richtigen Floor zuweisen zu können.
    Mein Problem ist allerdings, das jeder meiner erstellen Buttons alle den Index 0 haben! Was eigentlich nicht sein kann... und somit wird immer nur Floor 01 jedem Button zugewiesen X/
    Meine Frage ist daher nun, woran liegt das und wie änder ich es?


    Meine Radiobuttons basieren (mit eigenen abwandlungen) auf folgenden Tutorials:
    https://www.youtube.com/watch?v=E8QwYIPLc-c
    https://www.youtube.com/watch?v=W0eW6zmo38k


    Leider ist der gute Tefel nicht all zu explizit in seinen Ausführungen und hastet da ein wenig durch, dennoch habe ich wohl das meiste mehr oder weniger verstanden.


    Meine Abwandlungen:


    1. Damit die Buttons angezeigt werden In-Game, werden sie in meinem RadioButtonLine-Widget nicht per Event Pre-Construct ausgeführt wie im Tutorial, sondern als Function, welche im UMG-MainMenü abgerufen wird. Da die Anzahl Buttons nicht manuell sondern dynamisch erstellt werden. Je nach Anzahl der vorhandenen Floors halt.
    2. Im UMG MenüWidget gibt es die Funktion ConvertToName, welche jedem Index einen entsprechenden Floor-Namen zuweist. Dieser Name wird dann zusammen mit dem Index im "Button
    Floor 1-5"-Array eingefügt, woraus wiederum die Buttons mit entsprechender Bezeichnung erzeugt werden. Anzahl Buttons wie gesagt, abhängig vom SaveGame-Array.



    Und ich vermute mal, dass auch dort irgendwo der Fehler liegt. Eventuell am "Set Array Elem"? Nutze ich "Insert" stattdessen, habe ich aber das selbe Problem.
    Ich kann die Buttons anklicken und der aktuell selectierte Button wechselt auch jeweils die Farbe, aber lese ich dann meinen ausgewählten "Button Floor 1-5"-Array aus, ist seine "Length" immer 0 und das obwohl Buttons erstellt wurden. In meinem Fall drei Stück, also müsste die Länge doch auch bei 3 sein oder nicht?


    Der Button-Array wird nur kurz vorm Erstellen einmal geleert, aber nicht mehr danach, sollte also Indizes besitzen... Woran könnte es liegen? Ich weiß es ist eine Menge, inklusive der Tutorials, aber eventuell kann mir ja jemand dabei ein wenig in die richtige Richtung schubsen.
    Falls weitere Fragen bestehen oder Screenshots von Blueprints gewünscht sind, einfach bescheid geben!


    Schöne Grüße


    Ace D. :)

    Hi DarkFaces,


    danke für deine Antwort. Konnte den Fehler finden: anscheinend war die Größe des BoxTrace zu klein bemessen und der Trace fand vollständig im Inneren des Meshes statt, ohne die äußere Hülle zu treffen, wodurch wohl keine Collisionsabfrage stattfand. Sofern ich es richtig verstanden habe...
    Das ändern der Trace Response hat nichts gebracht. Auch auf Ignore funktioniert es nun.

    Hallo,


    für einen Dungeon habe ich ein Drehkreuz, welches durch BoxTraceForObjects überprüft, ob Gegenstände es blockieren und ob es sich dadurch gar nicht oder nur noch in bestimmte Richtungen drehen lassen kann.
    Und wie die Überschrift schon sagt, erkennt mein BoxTrace aus irgendeinem Grund meinen ObjectType nicht und es findet kein "Hit" statt.


    Im linken Bild sollte es für den Char jetzt nicht möglich sein, das Kreuz nach unten zu drehen und das untere Kreuz sollte sich so eigentlich nicht nach oben drehen lassen. Geht aber leider trotzdem...
    Im rechten Bild seht ihr den Blueprint und die eingestellen Werte zur Collision. ObjectType ist hier Box und er wird auch im ObjectType-Array vom BoxTrace korrekt angegeben.
    An den TargetPoints findet jeweils immer ein BoxTraceforObjects statt bevor gedreht wird, um zu überprüfen, ob an diesen Stellen etwas blockiert. Wenn ich an diesen Punkten andere Gegenstände plaziere, mit den selben Collisions-Werten, dann erkennt er sie korrekt und es kann nicht gedreht werden.
    Meine Frage daher ist nun, warum erkennt er den ObjectType vom Mesh des Blueprints nicht? Das untere Kreuz ist der gleiche Blueprint wie oben, nur als Kopie im Level plaziert.