Levelblueprint actionen per widget starten.

  • Hallo, leider komme ich bei einen recht simpelen versuch nicht weiter.
    Unzwar habe ich im Levelblueprint variablen. 3 boolean´s.
    Die werden auch im Level B.P. während des levels verstellt.

    Nun möchte ich aber eine action im selben level B.P. starten wenn im widget sein knopf gedrückz wird.

    Ich habe schon rausgefunden das man dafür ein costum event im Level B.P. erstellen kann. nur nicht wie ich dieses Costum event vom Widget aus ansprechen kann.



    Bin blutiger anfänger und habe noch kaum verständniss
    Finde dazu leider auch nichts

    • Offizieller Beitrag

    EIn Custum event den du benutzer definiert auslösen kannst.

    Damit du den Custum event auslösen kannst, musst du ihn erstmal erstellen und benennen dann wird er im Blueprint über die Suche gefunden.


    So läuft das ab:


    1.Rechtklickt Custom event erstellen.

    2.Custom benennen zb test

    3.Nun wieder Rechtsklick und nach test suchen.


    Nun könntest du zb durch den Event Beginn Play Event den Custom Event auslösen.

  • Danke.

    aber das Problem ist ja das der widget graph das custum event nicht findet, da dieses im Levelblueprint ist.
    Es ist im Levelblueprint erstellt und heißt dort A1.
    Wenn ich nun aber das widget öffne, ein knopf erstell und die funktion dieses knopfes soll A1 auslösen, findet der Widgetgraph A1 nicht.

  • Nagut, ich glaub mein problem ist zu einfach.
    Also


    wenn ich die box erreicht soll ein widget gezeigt werde, das klappt.

    Im widget ist ein Button. wenn ich den drücke soll A1 gestartet werden.

    Aber....


    ich weiß nicht wie man vom widget zum Level.B.P. kommt

  • Guten Morgen WAR BEER,


    Meine Empfehlung ist, dass Du nicht so viel im Level-Blueprints machen solltest, da die Variablen dann nur für dieses Level gültig sind. Ich würde das ganze als Actor auslagern, damit auch Du einen besseren Zugriff auf die Daten hast und es auch wiederwenden kannst - falls es notwendig sein sollte.


    Wie man dann von einem normalen Actor zugreifen kann, Dazu einfach mal den WIKI Beitrag von mir durchlesen ... -> Cast To...


    Lieben Gruß

    Nico

    Du suchst nach ein Videokurs über Unreal Engine 4? Auf meinem Kanal gibt es einen deutschen Videokurs über Unreal Engine 4. Link ist im Profil. Erstellter sämtlicher Wiki Videos im Forum!

  • Mit einem reinen Event kommst du da nicht weiter. Du brauchst einen Event Dispatcher um das umzusetzen.


    Als erstes baust du dir ein UMG_Widget mit dem Button.

    Dann fügst du dem ein Event Dispatcher hinzu.

    Dann erstellst du das Clickevent des Buttons und daran hängst du ein Callaufruf des Dispatchers.

    Sieht etwa so aus.


    In dem BP welches das Ergebnis aufnehmen soll, in meinem Fall habe ich mich mal an deine Vorgaben gehalten und das Level BP genommen wird das Ganze dann so verarbeitet.


    Du erstellst die Boolsche Variable.

    Ich habe jetzt beispielsweise bei BeginPlay den Button zum Vewport hinzugefügt und im HUD anzeigen lassen.

    Davon ausgehend bindest du den Eventdispatcher an ein Customevent welches ausgelöst wird.

    Und dieses Event setzt dann den Wert in die Variable.


    Sieht in etwa so aus...


  • Erstmal danke an alle.
    Leider bin ich total neu, und komme schnell und leicht durcheinander.
    Bei dem UMD widget blicke ich garnicht durch, tut mir leid.


    Wenn ich es mit cast to mache funtioniert es.
    ABER
    wenn ich einen neuen charkter B.P. erstelle, mit neuer funtion. funktioniert es wieder nicht
    cast faild.
    Wieso geht der ThirdPersonCharakter aber mein neuer nicht.


    PS. Ja ich weiß das der Cast to char.B.P. nicht angeschlossen, und keine funtion hat.

  • UMG_Widget ist quasi nur ein Widget das du bei Bedarf in das eigentliche HUD einfügen kannst. Also du hast ein HUD und eben halt weitere Widgets die du damit verbinden kannst. Sprich eine Minimap mit eigenen Funktionen, Kompass, Menüs oder, wie in diesem Fall, einen oder mehrere Buttons mit entsprechenden Funktionen.


    Du musst einfach nur ein extra Widget erstellen, mit einem Button für mein Beispiel und die BPs nachbauen. Natürlich auf die Namen achten.

  • Soweit habe ich das versucht.
    Aber bei Normalen widgets habe ich keine möglichkeit Event dispatcher , funtionen, oder anders zu erstellen.
    diese anzeigen gibt es da nicht.

    Habe nun ein buttom widget erstell und ein Event dispatcher dort erstellt, musste in dann per drag and drop in das erste widget ziehen um CALLZ6 zu bekommen.
    Das selbe habe ich im level B.P. gemacht.
    Leider kann ich jetz nicht ( wie bei dir oben gezeigt ) kein target an das BIND EVENT TO.... anschließen.

    wahrscheinlich liegt der fehler am ersten widget, ich ich dort kein Event dispatcher oder ähnliches erstellen kann. Brauch man da eine spezielle klasse ?

  • Okay, Nochmal schritt für schritt. Ganz kleine schritte.
    Level blueprint ruft widget auf.
    Ich erstelle ein standart widget. unter Userinterface Widget



    Und ein bottum widget unter blueprit class

    Dort erstell ich eine funtion ( Z6 ) in diesen fall.


    füge den ( Knopf ) in das erste widget ein.

    erstell den blueprint im widget (siehe oben )



    Da ich aber über das reguläre funtion suchen kein Z6 finde, habe ich über drag´n drop das Event Dispatch aus ( Knopf ) mit Assing in den LevelBluePrint gezogen.

    Dort find ich aber kein passendes Target

  • Was dir fehlt, ist das Verständnis, wie BP miteinander communizieren.


    Egal was du machst. Es gibt immer mindestens zwei Blueprints. Wenn du von einem ins andere "funken" willst, dann musst du immer dem ersten Blueprint (Sender) sagen, wo er hin funkten soll. Bei all deinen Screenshots fehlt dieser Punkt.


    Ein Widget ist letztlich auch nur ein Blueprint, der auf bestimmte Funktionen beschränkt ist. Klickt man auf einen Button, muss man dem Button immer sagen, welches andere Blueprint er anfunkten soll. Bei "CastTo" gibt es dafür ein "Target" und dort musst du dein Zielblueprint angeben.


    Ein Interface funktioniert genau auf die selbe Weise, wie ein CastTo von der Grundlogik nur dass du dort unendliche Variablen mitschicken kannst und diese im ZielBP verarbeitest.


    Als Tip: Wenn du anfängst in einem Widget Logiken abzuarbeiten, dann machst schon was falsch. Widgets dienen auschließlich dem Nutzer zur Kommunikation mit dem Spiel. Sie sollen niemals Spielelogiken abarbeiten, das macht immer ein BP im Hintergrund.

  • Danke, mein problem ist ja hauptsächlich das ich das mit den CastTo nicht hinbekommen.
    Bei allen Turtorials wird immer nur CastTo ThirdPersonCharakter beschrieben. das funktioniert auch.

    Jetzt will ich aber nicht das ganze spiel nur im ThirdPersonCharakter blueprint machen, also will ich zu einen anderen Blueprint casten. (hab schon charakterblueprint, levelblueprint und actor ausprobiert)


    Aber selbst wenn ich den ThirdPersonCharakter kopiere und umbenenne in .. sagen wir A1. und dann Cast to A1 , dann castet der überhaupt nichts, also nur der cast fail ausgang.

    Und die methode von Tomarr verstehe ich leider garnicht.

  • Na dann versuche ich es noch einmal zu erklären.


    Du hast dein Headupdisplay. So weit, so gut.

    Du erstellst ein Widget in dem der/die Button(s) sind.


    Nehmen wir erstmal nur einen Button an, der Einfachheit halber.


    Du erstellst also ein neues Widget. Gibst dem ganzen einen Namen und öffnest es.

    In dieses Widget zeichnest du einen stinknormalen Button und ziehst ihn auf die Größe, die du haben möchtest.

    Wähle den Button aus und scrolle unter den Details nach ganz unten. Dort findest du die Events.

    Wähle die grüne Schaltfläche mit dem weißen Plus aus die mit On Clicked bezeichnet ist.


    Die Ansicht wechselt nun automatisch auf Graph und du hast dort ein Event das ausgelöst wird, wenn der Button geklickt wird.

    Auf der linken Seite klickst du nun auf das Pluszeichen in der Kategorie Event Dispatcher, um einen Event Dispatcher hinzuzufügen.

    Gib diesem Event Dispatcher einen Namen nach deiner Wahl.

    Unter den Details des Dispatchers fügst du unter Input eventuell noch einen Eingangswert hinzu, in meinem Fall vom Typ Boolean.

    Jetzt ziehst du den Event Dispatcher in dein BP-Graphen und bei dem aufpoppenden Menü wählst du Call aus.

    Nun verbindest du das Klick-Event und den Call des Dispatchers miteinander.

    An dieser Stelle bist du fertig mit dem Widget. Also Compilieren und speichern.


    Nun öffnest du dein Level BP, oder welches BP du auch immer nutzen möchtest welches auf den Dispatcher reagieren soll.


    Im Level BP suchst du nun das Event BeginPlay


    Das baust du auf wie in meinem zweiten Screenshot.

    Also erst Create Widget, und als Class wählst du das Widgett aus in dem du deinen Button hast.

    Dann fügst du Add to Viewport hinzu. Return Value von Create verbindest du mit Target im Add toViewport.

    Dann erstellst du eben halt besagtes Bind Event to mit deinem Event Dispatcher. Auch hier verbindest du Return Value aus Create Widget mit dem Target von Bind Event to.

    Nun Machst du AddCustomEvent. Dem Event gibst du wiederum einen Namen deiner Wahl.

    Dieses Event verbindest du nun mit dem Event Pin von Bind Event to.


    So wird dann im BP dein eigenes Event ausgelöst, sobald der Event Dispatcher ausgelöst wurde.


    Alles was du dann an deinen Custom Event dranhängst ist dann wiederum deine Sache. Zum Beispiel das Setzen eines Boolean-Wertes.