UMG Radiobutton Index vom Button auslesen

  • 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,

    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

    sind den Deine Buttons in einem Array gespeichert? Oder wie willst du den Index auslesen. Du erstellst ja nur ein Array mit Namen.
    Mir ist nicht klar wie Button und Array zusammen hängen.

  • ich glaube das Name-Array hat keine Einträge, ist das das Problem? Am gezeigten Code kann ich nicht feststellen warum das so ist. Eventuell schlägt der Cast fehl und es bricht dort ab. Ansonsten müssten wir wohl sehen wie die Buttons erstellt werden.
    Noch ein kleiner Tipp: "SwitchOnInt" benutzen, das ist schöner als 100 branches.

  • Rautenförmige Pins sind -meine ich- für Referenzen. Siehe:



    [Blockierte Grafik: https://answers.unrealengine.com/storage/temp/140033-getref.png]


    Und das wird hier das Problem sein. Es wird die Referenz eines "Names" übergeben, und nicht der "Name" an sich. Diese Referenz müsste dann ja sogar die eventuell lokale variable "Floor Name" der Funktion sein, oder nicht?
    Wenn das so ist, müsste sie ja eigentlich immer ungültig sein.
    Das ist der Fehler. Der Pin in der SetArrayElement Node müsste Rund sein, warum er es nicht ist, ist wahrscheinlich, dass das Array kein eigentliches "Name" Array ist, und Referenzen anstatt Namen speichert.
    AceD: Versuche mal, das Array zu löschen und durch ein anderes Name Array zu ersetzen, oder versuch erstmal die Node zu ersetzen.

  • Wenn ich den Text richtig gelesen habe, dann geht es um die Kästchen richtig ?


    Die Kästchen sind ein Zeichen für ein Array, normaler Kreis = einfache Variable, Kästchen = Arrays.
    Falls ich mich verlesen habe ... nichts für ungut.

  • Hi,


    sorry, ich hab Probleme gehabt gestern mit meinem Passwort und heute wieder... Hätte jetzt 13 Stunden warten müssen, um ein neues PW erstellen zu können. Daher der neue Account. Werde ihn dann später wieder löschen.



    Hi,

    sind den Deine Buttons in einem Array gespeichert? Oder wie willst du den Index auslesen. Du erstellst ja nur ein Array mit Namen.Mir ist nicht klar wie Button und Array zusammen hängen.


    Es wird nur ein Array mit Namen erstellt und anhand der Anzahl an Namen, werden entsprechend Buttons erstellt (sofern ich es richtig verstanden habe..).
    Und auch das Array mit Namen sollte ja dennoch dann Indizes haben oder nicht? Für jeden Namen einen.


    Wieso hat dein "Set Array Elem" diesen viereckigen Pin? Konnte ich auf die schnelle nicht reproduzieren.
    Ich habe da einen ganz normalen Pin.

    Ist mir gar nicht aufgefallen der Pin. Mittlerweile ist der Item-Pin in "SetArrayElem" aber auch wieder Rund. Keine Ahnung wodurch das entstand... Das Problem besteht aber auch damit weiterhin...

    Wenn ich den Text richtig gelesen habe, dann geht es um die Kästchen richtig ?


    Die Kästchen sind ein Zeichen für ein Array, normaler Kreis = einfache Variable, Kästchen = Arrays.
    Falls ich mich verlesen habe ... nichts für ungut.

    Dachte auch erst, es ginge um das Array-Symbol, aber im Screenshot scheint der Item-Pin im SetArrayElement Node rautenförmig zu sein. Mittlerweile aber wie gesagt, nicht mehr.


    Im Tutorial werden die Namens-Eintrage im Button Array manuell erstellt und wären dann auch im Designer direkt sichtbar, wenn es über das Event Pre-Construct laufen würde. Und dann hätte er ja auch entsprechend mehrere Indizes und sollte eine größere Length ausgeben.. Verstehe halt nur nicht, warum er es dann bei mir nicht macht.


  • Es wird nur ein Array mit Namen erstellt und anhand der Anzahl an Namen, werden entsprechend Buttons erstellt (sofern ich es richtig verstanden habe..).
    Und auch das Array mit Namen sollte ja dennoch dann Indizes haben oder nicht? Für jeden Namen einen.

    Alles richtig, aber der Button kennt ja nicht den Index, er bekommt ja nur einen Text mit den er dann anzeigt.
    Wenn der Button angeklickt wird muss er ja wissen das wievielte Child er von der "Floor 1-5 Box" ist.
    Hab mir das Tutorial jetzt nicht angeschaut, aber die entsprechende Logik wird wohl im Button-Widget oder in der "Floor 1-5 Box" sein.


    Nur mal so als Idee.
    Wenn die Buttons erstellt werden, dann gebe ihnen doch auch gleich den Namen des Levels oder zumindest den Index mit. Wenn der Button dann ausgewählt wird dann hat er schon alle Infos die er braucht.

  • Alles richtig, aber der Button kennt ja nicht den Index, er bekommt ja nur einen Text mit den er dann anzeigt.Wenn der Button angeklickt wird muss er ja wissen das wievielte Child er von der "Floor 1-5 Box" ist.
    Hab mir das Tutorial jetzt nicht angeschaut, aber die entsprechende Logik wird wohl im Button-Widget oder in der "Floor 1-5 Box" sein.


    Nur mal so als Idee.
    Wenn die Buttons erstellt werden, dann gebe ihnen doch auch gleich den Namen des Levels oder zumindest den Index mit. Wenn der Button dann ausgewählt wird dann hat er schon alle Infos die er braucht.

    Stimmt. Die Funktion gibt es auch, hätte ich vielleicht noch erwähnen sollen. Zunächst wird ein Macro erstellt, welches die Anzahl an Button zählt:



    Damit wird dann widerrum die Anzahl der Buttons durchgegangen, bis der selektierte Button gefunden wird.


    Mein Problem hier ist halt nur, wenn ich eben genau diesen Index auslese, er mir bei jedem Button den Wert 0 gibt. Auch wenn der Button selektiert ist. Bzw gibt er mir als Beispiel bei 4 Buttons, direkt auf einmal viermal den Wert 0, wenn ich ihn per "Print String" ausgebe.


    Zu deiner Idee:
    Im Grunde war das mein Gedanke und ich habe gedacht es würde genau so funktionieren... nur mit dem Unterschied, dass ich es über den Button-Namen einfach auslese und nicht direkt vom Button selbst. Denn wenn ich als Bsp. 4 Button-Namen habe, habe ich 4 Level und der Button-Namen-Array sollte 4 Indizes haben..

  • 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 :)