Widget für Dialoge und Inventory

  • Hi zusammen.

    Nachdem ich nun meine Idee eines festen Bereichs für Dialoge, Inventory usw. verworfen habe, brauche ich vielleicht doch noch einmal ein paar Anregungen.

    Da ich mit Widgets noch immer nicht so 100 % warm werde, was den Umgang angeht, habe ich mir folgendes überlegt.

    Ich würde mir gerne ein Widget erstellen, welches das Inventory als Bilder anzeigt, genauso wie die Dialoge. Dabei geht es mir nicht um irgendeine Logik zum Verwalten des Inventorys oder der Dialoge, das ist nicht so schwierig. Mir geht es vielmehr darum, ein sauberes Widget hinzubekommen.

    Und zwar geht es mir um folgendes. In dem Widget sollen wie gesagt gegebenenfalls die Dialoge (oben) und das Inventory (unten) angezeigt werden. Wobei, wenn eins von beiden leer ist, soll der Bereich gar nicht angezeigt werden. Zum Beispiel, wenn ich mein Inventory öffne, dann kann ich mich ja kaum mit dem Unterhalten, sprich es wird nur der Inhalt des Inventoys angezeigt. Wenn ich mich jedoch mit einem NPC unterhalte und es sind Gesprächsthemen vorhanden, soll beides angezeigt werden, sind keine Themen vorhanden, nur das Inventory, weil theoretisch könnte ich mich ja auch über die Gegenstände mit dem NPC unterhalten.


    Das Ganze soll in Form von Bildern möglich sein, auch das ist kein Problem, die Bilder habe ich, jedoch sollen auch gegenstände im Inventory per Drag and Drop kombinierbar sein. Zum Beispiel ein Schwert mit einem Schleifstein oder so.

    Zudem darf das Inventory und die Dialoge auch nicht zu breit werden, ich dachte da so an 6 oder 7 Gegenstände nebeneinander, danach soll eine neue Zeile angefangen werden.

    Sprich, das Widget muss halt auch individuell neue Symbole hinzufügen können, oder auch entfernen, zum Beispiel, wenn man einen Dialog ausgeführt hat und danach unnötig ist, oder der Schleifstein abgenutzt ist etc.

    Also muss sich das Widget, bzw. der Inhalt, auch im geöffneten Zustand ständig aktualisieren lassen.

    Allerdings habe ich bei Widgets immer so das Problem, dass ich den Aufbaubaum nie so wirklich unter Kontrolle habe. Ich komme dann immer von einem Detail ins nächste, habe da auch bestimmt zig Knotenpunkte drin, die ich auch weglassen könnte usw. Sieht auf jeden Fall nicht schön aus und ist recht unsauber.

    Vielleicht hat ja der Eine oder Andere einen kleinen Tipp für mich, wie ich das ein wenig sauberer umsetze. Vielleicht sieht man das im fertigen Spiel nicht, aber erstens entspricht so ein Gefrickel nicht meinen Ansprüchen und zum anderen geht es ja auch um Wartbarkeit, falls etwas geändert werden muss.

    Vielen Dank schonmal.

  • So, nachdem ich nach 46 Stunden endlich mal wieder zwischendurch geschlafen habe und auch gestern schon meine Überlegungen hier aufgeschrieben habe, was natürlich weitere Überlegungen erleichtert, habe ich jetzt folgende fortführende Überlegungen angestellt, möchte aber vor der Umsetzung hier ein wenig Rückfrage halten, ob ich mich da Ideen mäßig auf dem Holzweg befinde, weil wie gesagt, Widgets sind nicht so ganz mein Ding.

    Folgendes habe ich überlegt. Die Anzeige des Inventorys und der Dialoge mache ich per Vertical Box, also untereinander. In diese packe ich (UMG) horizontal Boxen, die jeweils diese besagten 6 oder 7 Elemente anzeigen kann, wenn es mehr sind, dann wird halt eine witere horizontale Box da unter gepackt.

    Das scheint mir erstmal die einfachste Lösung zu sein. Die horizontalen UMGs kann ich ja, zumindest denke ich das, ja auch mit Named Slots machen? Ergibt das Sinn, wenn ich individuell dazwischen auch Objekte herausnehmen will und die Lücke dann schließen möchte?

    Jetzt ist aber eine der Fragen, die sich mir stellt, wenn ich jetzt, sagen wir zwei horizontale Boxen habe, und ich arbeite die obere ab, kann ich die "Kommunikation" zwischen den Beiden dann irgendwie so gestalten, dass alle Punkte dann nachrücken? Also sagen wir oben gibt es 6 Punkte zum Abarbeiten, darunter folgen noch drei. Jetzt lösche ich den ersten Punkt (oben) und dann rücken alle anderen Punkte nach, inkl. der Leiste darunter. Und wenn die untere Leiste leer ist, dann kann sie ja auch entfernt werden.

    Das Ganze soll dann ja auch noch getrennt sein, also die Inventory-Punkte sollen nicht nachrücken.

    Ok, nachdem ich die Gedanken mal wieder schriftlich festgehalten habe, kommen mir da natürlich wieder weitere Ideen, dennoch hätte ich da gerne doch ein paar Gedanken von euch, falls ihr welche habt, damit ich mich, wie schon erwähnt, nicht irgendwie wieder total verfange.

    • Offizieller Beitrag

    Es gibt auch Grid. Das wäre evtl für dich einfacher. Dann ist es evtl auch sinnvoll diesen Grid in eine Scroll zu packen. Damit alles hübscher aussieht bekommt jeder eine Box, da man mit Box viel Design hinbekommen kann. Eine Grid mit script zu füllen ist nicht einfach, da muss man bisl logisch denken, weil jedes Item hat nen festen Slot im Grid. Der sortiert nicht von alleine. Entweder du schreibst ein script, der das immer sortiert, wenn eins herausgenommen wird, oder du füllst diesen grid immer wenn du das inventar öffnest.

    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.


    Dann ist da noch etwas was du unbedingt wissen musst. Widgets können nicht eliminiert werden. Sie bleiben für immer da. Wenn du Widgets, also in dem Fall Items mit Bilder, die in das Grid geladen werden per CreateWidgets und AddChild, dann werden immer widgets erstellt. Wenn du eins vom Grid entfernen möchtest, dann musst du removeFromParent nutzen, aber das entfernt sie nur vom Parent. Öffnest du jetzt dein Inventar 100 mal, sind 100 mal widgets vorhanden von deinen Items. Sie schweben praktisch im leeren UE4 Universum und sind jederzeit greifbar. Daher überprüfe vorher, ob das widget schon vorhanden ist, oder neu erstellt werden muss. Du kannst von mir aus auch gleich alle item widgets erstellen, die in ein map packen, die von einer Datenbank gelesen wird. So hast du die gleich griffbereit.

    • Offizieller Beitrag

    Es gibt einige Dinge die es ermöglichen sich an das Parent anzupassen. Es sieht nicht geil aus, wenn zb ein Itemslot größer aussieht als das andere, nur weil es sich anpassen soll. Daher weis man schon im voraus, wie groß die Itemslot sein sollen. Dann nimmt man Size um sich das zu sichern. Verwende einfach ein Uniform Grid. Damit wird alles schön in Reihe gehalten.



    Wenn du Jede Size box Mittig ausrichtest, dann wird der Effekt schöner.


    Jetzt kannst du sicherlich bemerken, dass durch 2 Rows sehr viel Platz zueinander ist. Dass ist halt ein Nachteil mit Uniform Grid.
    Daher nehme ich gerne GridPanel. Jeder Size hat ein Padding von 5 um sich von den anderen Size Boxen fern zu halten.


    Ich glaube, GridPanel ist auch das einzige was scrollbar ist, wenn es in einer Scrollbox ist. Uniform hat aber in den Settings, minDesiredSlotWidth. Ich glaub, das kann man ausnutzen, wenn man scrollen will, habe es aber noch nicht ausporbiert.

  • Ne, nicht, die einzelnen Items sind unterschiedlich groß. Aber, es soll halt so sein, dass nicht automatisch 2 Zeilen dargestellt werden, auch wenn die zweite Zeile leer ist.

    Ich versuche das Spiel so zu designen, dass auch nie mehr als zwei Zeilen, sowohl für das Inventory, als auch für den Dialog benötigt werden. Mehr sollte sich beim Spieler nicht anstauen.

    Ich werde beides mal ausprobieren, also Horizontal-Boxes, als auch Grid-Canvas.

    Beim Grid, wenn ich da ein Objekt vorne, oder auch in der Mitte lösche, rücken die Anderen dann nach vorne durch, oder muss ich dann kurzerhand das Grid per Routine neu füllen, was ja dann auch wieder eine gewisse Zeit benötigen würde, welches vielleicht dem Spieler unangenehme auffällt?

    Oder man trickst hier ein wenig, macht zwei Grids. Eins, was sich im Hintergrund aktuell hält und bei Bedarf ausgetauscht wird.

  • Ich glaube, GridPanel ist auch das einzige was scrollbar ist, wenn es in einer Scrollbox ist. Uniform hat aber in den Settings,

    Ach so, ganz vergessen. Nein, das geht auch mit Vertikal und Horizontal Boxen. Ich hatte doch mal einen Chat in den Tutorials geschrieben, der leider völlig zerstört ist, weil die Bilder nicht mehr funktionieren. Der funktioniert auch mit Vertikal Boxen, kann aber auch eine Scrollbar erstellen, bei Bedarf.

  • Nur damit du nicht denkst, ich hätte die ganze Sache vergessen. Das Gridpanel scheint gut zu funktionieren. Bzw. zwei Gridpanels, ich habe Dialog und Inventory getrennt, da sie auch unterschiedliche Buttons beinhalten. Zum Inventory kommt ja noch Drag and Drop hinzu.


    Ich habe testweise mal ein paar Buttons von Hand reingepackt, zwecks Abschätzung wie groß der Dialog maximal angezeigt wird usw., sieht aber relativ gut aus. Aber so richtig entscheiden wird es sich, wenn dann auch Drag and Drop implementiert ist.


    Allerdings, wie immer irgendwo an einer Stelle mit Widgets, gibt es irgendwie immer ein unerwartetes Problem. Ich habe ein Widget erstellt, was eben halt Größe und Form beinhaltete, welches ich dann im Haupt HUD einbauen will. Und irgendwie ist dafür das Pivot immer oben links, egal ob ich die Pivoteinstellungen auf 0, 0.5 oder 1 einstelle. Das sollte doch eigentlich nicht sein.