Widget Visibility

  • Moin, ich arbeite grade an einer Sache bei meinen Widgets. Wo mir dann eine Frage aufkam.


    Ich brauchte eine Variable aus einem Widget(B) in Widget(A).

    Bisher wurde B aber es erstellt durch einen Button Druck in A. Wodurch ja natürlich ich die Variable noch gar nicht erreichen kann da sie ja gar nicht existiert.

    Da kam mir die idee einfach die Widgets beim Laden des Levels zu erstellen und dann einfach die Visibility zu toggeln durch die Buttons.


    Jetzt die Frage ob das sinnvoll ist?

    Sollte das man so machen? Habe bisher einfach die widgets "Remove from patent" gemacht wenn cih das Widmet gewechselt hab.

  • Ich denke es reicht durchaus die Widget beim Laden des Levels zu erstellen.
    Du brauchst aber dann nicht die Visibility toggeln, sondern kannst dann einfach mit "Remove from Parent" und "Set to Viewport" arbeiten.
    Das Widget sollte ja durch das erstellen "Create Widget" existieren und somit auch die Variablen.


    Beispiel bei der HUD habe ich auch Widgets, die ich schon beim Beginn erstelle. Dann wenn ich diese brauche rufe ich diese nur zum Viewport und entferne diese wieder wie vorhin beschrieben. Jedesmal gleich ein neues Widget zu erstellen wenn man es gerade brauch, find ich nicht immer nötig. Also warum nicht nur 1x gleich zu beginn?

  • Moin,

    Da stellt sich mir die Frage ob die Variable aus Widget B aus irgendeinem anderen Blueprint einen Bezug hat. Wenn die Variable nur in Widget B einen Bezug hat, wäre sie demnach in Widget A immer Null und erst im Verlauf des Spieles ein anderer Wert.

    Am einfachsten wäre es vermutlich die Logik die du in Widget B hast in Widget A zu implementieren und danach von Widget B auf Widget A zugreifen(die Variable). Also den Verlauf abändern.

    Sollte deine Variable aus Widget B einen Bezug zu einem anderen Blueprint haben, wäre es vermutlich sinnvoll die Variable nicht aus dem Widget zu holen sondern aus dem entsprechenden Blueprint.

    Da ich aber nicht weiß wie dein Blueprint aufgebaut ist, ist es auch schwierig darauf zu antworten.

    Ich hoffe ich war trotzdem eine kleine Hilfe.


    P.S.: Ein kleiner Screenshot hilft bei Blueprints oft Wunder ;)

    • Offizieller Beitrag

    Wodurch ja natürlich ich die Variable noch gar nicht erreichen kann da sie ja gar nicht existiert.

    Da wäre ich grundsätzlich vorsichtig da es zu einem Fehler kommen kann wodurch dein Anwendung abstürzen könnte . Der Fehler kann auch passieren wenn das Widget nicht sichtbar ist. Nicht sichtbar bedeutet nicht, das nichts berechnet werden.

    Besser wäre, wenn die Variablen gibt und sie einen Default Wert haben. zb 0 oder "N/A" oder was auch immer.


    Ich würde es machen wie Rasputin es gesagt hat. Wenn neue dinge zum Widget hinzukommen, solltest lieber das Widget erweitern und die Informationen auf jeden Fall aus dem Blueprint auslesen. (Das hatte ja MACArmand bereits geschrieben) Vermeide es im Widget dinge auszurechnen und die wieder ans Blueprint zu senden.
    Sehe das Widget als Display wo nur Informationen angezeigt werden berechnet, werden sie im jeweiligen Blueprint.

    • Offizieller Beitrag

    Tatsächlich ist Hide die bessere Wahl. unparent ist einfach dafür nicht vorgesehen.

    Beim Widget bin ich selber nicht einig, ob alles in einem Widget erstellt werden soll, oder Widgets sich mit anderen Widget überlappen sollen. Ich mache es aber meistens alles in einem Widget, man hat mehr Kontrolle, aber mehr Chaos. Naja, wird etwas unübersichtlicher. Dann würde ich mit WidgetSwitcher arbeiten und die widgets so einblenden lassen. Man kann anstatt alles in einem Widget zu erstellen, auch mehrere widgets erstellen und die mit BP in einem WidgetSwitcher füttern.


    Und trotzdem gebe ich noch ein Tip. Irgendeiner muss ja dieses widget erstellen. Also erstellt ein BP Actor dieses Widget und gibt dem Widget sein "self" weiter und lässt sie im Widget abspeichern. Somit weis Widget A sein Erschaffer. Nun kann Widget A ein Widget B erstellen und Widget A gibt sein "self" an Widget B Weiter und speichert die dort in eine Variable. Somit weis Widget B, wer sein Erzeuger ist.