Blueprint Datenübertrag von/nach Widget

  • Ja das Thema gabs ja nun schon einige male im Forum.


    1.Ich habe in meinem Widget eine Variable festgelegt die heißt Set Xlocation (Das ist das Widget)


    2.In meinem Blueprint habe ich eine neue Variable erstellt die heißt Wo_SetXLocation 

    3.Als Variable Type habe ich das Widget als Reference  angegeben.


    So sieht das dann aus:


    Ich kann mir die Daten also direkt aus dem Widget holen und als Float verwenden.


    Das Problem ist nun das WO Set XLocation eine Variable ist in die ich im Blueprint (Nicht im Widget) nichts schreiben kann.

    Damit ich mit den Daten aus dem Widget weiterarbeiten kann, müsste ich sie in Float Variablen schreiben.


    ändere sich die Float Daten im Blueprint wäre das so:


    Ändern sich Float Daten im Widget würde das so aussehen:




    Aus der Variable in die nächste Variable ?



    Kann das sein, gibts da keinen anderen Weg ?

    You may love to play games, but that doesn’t make you a developer.
    I love to eat dinner, but that doesn’t make me a chef.

  • Warum benutzt du dann kein Binding?

    Hab mich damit ehrlich gesagt noch nicht sonderlich befasst.


    Das ist eine Editable Textbox und ich möchte sowohl Zahlen anzeigen auch soll man Zahlen dort ändern können.


    So Sende ich im Moment an das Widget:



    Und so wird das angezeigt:



    Bin mir selbst noch nicht sicher ob das alles der richtige Weg ist :)

    You may love to play games, but that doesn’t make you a developer.
    I love to eat dinner, but that doesn’t make me a chef.

  • Also, wenn du auf Create Bindibng in einer Editable Textbox glickst wird automatisch eine Funktion im Widget eingebaut die das Senden übernimmt. Halt mit einem Returnvalue Text.


    Gleichzeitig könntest du die entsprechende Funktion quasi kopieren, nur umgekehrt, so dass du die Variable setzen kannst. Dann hast du in beide Richtungen die Möglichkeit die Variable zu manipulieren.


    Eigentlich genau so wie in meinem Wiki über die Nachrichtenanzeige.


    Wenn du dann noch ein Event benutzt ist der Zugriff über eine Funktionslib recht einfach.


    Schau dir das Wiki einfach mal an. Du brauchst halt den Teil mit dem auf den Kopfstellen usw. nicht. Aber die Kommunikation zwischen Widget und BP sollte auch auf deinen Fall zutreffen.


    Nachricht- / Information- / Chatanzeige (HUD) ohne komplizierte Indexsortierung

  • Gut ein Blueprint mit einer Textbox per Binding verbinden macht Sinn.


    Was aber wenn du Informationen weiterverarbeiten willst.


    1.Du gibst was in einem Widget ein sendet dies nach Blueprint1

    2.In Blueprint1 rechnest du damit irgend was aus wodurch die Zahl verändert wird. Also sendest du die Informationen wieder zurück ans Widget zum Anzeigen.


    So nun nehmen wir mal an ich brauch die Zahl nachdem sie in Blueprint1 ausgerechnet wurde noch in einem anderen Blueprint2. Nun muss ich auch von dort die Informationen wieder ans Widget und an Blueprint1 schicken.


    Oneway machen Bindings absolut sinn aber wenn das viele Fenster und Berechnungen im Spiel sind wird das doch sehr untranparent.


    Gibts da keine Einheitliche Variable wo ich von überall reinschreiben und lesen kann.

    You may love to play games, but that doesn’t make you a developer.
    I love to eat dinner, but that doesn’t make me a chef.

  • Du hast aber echt komplizierte Sachen vor.


    Aber im Zweifelsfall würde ich das alles über Events lösen. Sprich ein Event, wenn eine Eingabe erfolge, ein Event, wenn etwas zurückgesendet wird. Eventuell noch ein Event für die BPs untereinander.


    Die Events löst du in der Funktionslib aus.


    Events haben dann halt den Vorteil das sie nicht ständig mit ticken und nur auslösen, wenn du es explizit aufrufst. Wahlweise kannst du natürlich auch Funktionen aufrufen, aber ich glaube dann musst du vorher casten.

  • Ja nur bei Eventuells sind das ja immer nur Tunnel von A nach B, fließen aber mehre Blueprints zusammen sind events auch sehr unkomfortabel.


    zb:

    1.In meinem Fall möchte ich ein Mesh erstellen das hat die Position XYZ diese Position zeige ich in einem Widget an. Blueprint nach Widget


    2.Nun möchte ich die Postion aber auch im Widget ändert können das heißt die Informationen müssen zurück an das Blueprint gesendet werden.

    Custom event hin und wieder zurück.


    Wenn nun noch ein Blueprint ins Spiel kommt werden es schon 3 Custum events die sich sachen zusenden müssen.


    Ist das wirklich so kompliziert wenn man mehr wie Oneway braucht ? :)


    In einer Mysql Datenbank werden doch auch ständig Daten gelesen, geschrieben und das von unterschiedlichen Stellen aus.

    You may love to play games, but that doesn’t make you a developer.
    I love to eat dinner, but that doesn’t make me a chef.

  • Ich wüsste jetzt nicht wo das Problem ist. Für das editierbare Textfeld gibt es ein Event das ausgelöst wird, wenn du Enter drückst oder die Textbox den Focus verliert.


    Zurück kannst du ein Customevent nehmen.


    Und dann baust du nach und nach zwischen den Actoren darauf auf. Nach und nach. Ein Problem nach dem anderen. Und, wenn ich deine Threads richtig verfolgt habe fragst du ja schon nach Is Actor Valid ab. Und das benutzt du am Ende dann als Ziel BP. Zumindest nehme ich mal an das du den Actor den du gerade aufgenommen hast manipulieren willst.


    Alles andere, Zwischenberechnungen usw., kannst du doch locker in Unterfunktionen packen. Da brauchst du doch keine xxx Blueprints.

  • Ich finde das ja immer noch umständlich gelöst aber wahrscheinlich habe ich auch noch nicht zu 100% verstanden.



    1.Hier setze ich ein Bool in die Variable "isselected1" der Bool wird für den Print ausgegeben.

    Funktioniert alles wie es soll


    2.Nun mach print weg aber die Variable wir ja trotzdem noch gesetzt.


    So:


    3. In einem anderen Blueprint hol ich mir den Bool aus der Variable und möchte ihn per Tick auf dem Printstring anzeigen. Im Prinzip genau gleich wie oben. Auch gibt es die Variable "Isselected" die im anderen Blueprint auch automatisch gefunden wird.



    Warum kommt hier nichts an ?


    Es ist doch beides ist doch das selbe oben funktioniert unten nicht.

    You may love to play games, but that doesn’t make you a developer.
    I love to eat dinner, but that doesn’t make me a chef.

  • Die object reference ist in deinem letzten Screenshot ja noch == null. Hast du sie da irgendwo auch gesetzt?

    Ja im 1. Screenshot.


    Wie gesagt führe ich das im 1. Blueprint aus klappt das auch.



    Nur rufe ich die Varaible im anderen Blueprint ab ist nichts drin



    You may love to play games, but that doesn’t make you a developer.
    I love to eat dinner, but that doesn’t make me a chef.

  • Aber da setzt du ja den boolean. Ich meine die Object Reference in dem "anderen" Blueprint

    Das musst du mir erklären versteh ich nicht.


    Also ich bin davon ausgegangen das ich zb in Bluepprint 1 etwas in eine Variable schreiben kann.


    von einem Blueprint2, kann ich diese abrufen in dem ich eine Variable anlege und dort das Blueprint1 als Referenz angebe.

    Im letzen Screenshot ist das "isselected"


    Mach ich dort jetzt eine neues Blueprint, wird auch Get isselected1 in der Liste gefunden.



    Oder wird die auch nur leer erstellt ? Das macht doch keinen Sinn :)


    Ich dachte so könnte ich auch eine Varaible setzen:



    EDIT:



    Also mit Get All Actors of Class und nen For Each Loop geht es.


    Ich finde das mit meinem begrenzten wissen (Wahrscheinlich fehlt mir das Verständnis) seltsam gelöst warum kann man nicht etwas in eine Variable etwas reinschreiben und diese von überall auslesen oder beschreiben?

    You may love to play games, but that doesn’t make you a developer.
    I love to eat dinner, but that doesn’t make me a chef.

  • Das geht mit GetAllActorsofClass, weil du die eigentlichen Objekte bekommst.

    Wenn du in Blueprint 2 eine Variable vom Typ "Object Reference (pointer in C++) > DEIN BLUEPRINT" erstellst, dann hat diese keinen Wert. (Also ein nullptr in C++).

    Es könnte ja auch mehrere Instanzen deines Blueprints geben, die Engine weiß ja nicht welchen du meinst.


    Deshalb müsstest du erst ein "Set Isselected" (das in blau, die object reference) aufrufen.


    Edit: Obwohl... :/ Eigentlich müsste das dann auch ein accessed none sein. hmmm werde ich wohl mal testen müssen

  • Ich glaube, wenn es jetzt nur um die Kommunikation zwischen den Actors geht, dann hilft dir hier ein Funktionsinterface weiter. Funktioniert aber nicht, wenn es um die Kommunikation zwischen Actor und Widget geht.

    Wenn du Blueprint Interface meinst, funktioniert auch mit Widgets.Funktioniert überall dort wo man BP-Interface hinzufügen kann.


    Eine Objekt-Referenz als Target braucht man trotzdem, das ist hier glaube ich das Hauptproblem.

  • Oh shit. Dann hätte ich es auch in meine Widgets benutzen können? Verdammt, ich glaube, ich muss mein Projekt nochmal überarbeiten.


    Aber ja, das meinte ich. Ich dachte daran, dass du den Wert einer Variable dann vielleicht über die Funktion weitergeben kannst. Aber ich habe jetzt noch nicht all zu viel gemacht mit Interface. Derzeit baue ich noch am Rahmen meines Projektes, sprich viele Dummyfunktionen die nach und nach gefüllt werden. Aber kann durchaus sein, das es wegen der Referenc ein Problem ist.