Kein Zugriff auf Variable einer anderen Blueprint

  • Guten Abend,


    ich möchte aus einer Blueprint A heraus auf eine bestimmte Variable einer Widget-Blueprint zugreifen.

    Diese Variable, vom Typ Bool, erscheint nicht in der Blueprint A.


    Ich führe in Blueprint A aus:

    "Get all Widgets of Class", selektiere mein Widget, ziehe aus "Found Widgets" den blauen Faden heraus und das Elend beginnt...

    Ich kann auf die beiden anderen Variablen in der Widget-BP per Get und Set zugreifen, ich kann die beiden Funktionen aufrufen, der Boolean taucht nicht auf.


    Die nicht erscheinende Variable ist genau wie die anderen beiden als "public" und "Instance Editable" deklariert.

    Das Einzige, was mir zu dieser Variablen einfällt, ist, dass ich sie erst später als "public" deklarierte, also das Augensymbol rechts daneben steht.

    Kann es damit zusammenhängen?


    Ich habe das Projekt schon geschlossen und neu compilierern lassen.

    Es fruchtet alles nichts, die Variable erscheint einfach nicht in Blueprint A.


    Habt ihr eine Idee, woran das liegen mag?


    Vielen Dank für eure Hilfe.

  • Eigentlich kann es damit nicht zusammenhängen. Wann du eine Variable auf Editable setzt, ist absolut Wurst. Wichtig ist nur, dass du das Widget dann noch einmal compilierst damit er die neuen Einstellungen auch sicher erkennt.


    Jetzt bin ich allerdings gerade am überlegen, wieso man auf eine boolsche Variable direkt im Widget zugreifen möchte. Normalerweise benutzt man diese eher für interne Zwecke, wenn man es als reine Variable deklariert. Wieso übergibst du den benötigten Wert nicht per Funktionsaufruf?

  • Hallo.


    Danke für deine Antwort.


    Es handelt sich bei dem Projekt um ein Testprojekt, in welchem ich verschiedentliches ausprobiere.


    Um deine berechtigte Neugier zu befriedigen:

    Die boolsche Variable dient dazu, dass das Widget weiss, ob der Timer noch weiterlaufen soll oder nicht.


    Mir ist bewusst, dass solche direkten Zugriffe aus gutem Grund verpönt sind.

    Und das man das generell anders lösen kann ebenfalls.

    Wie gesagt, nur ein Testprojekt.


    Und jetzt geht es mir ums Prinzip, weil ich mir absolut nicht erklären kann, wieso ich nur auf diese eine Variable nicht zugreifen kann, sprich, sie wird in der Blueprint nicht aufgelistet.


    Ich habe alles schon mehrfach neu kompiliert, nutzt nichts.

  • Jetzt habe ich vor dem Öffnen des Projekts die Ordner "Intermediate" und "Saved" geleert.

    Anschließend das Projekt neu geladen, in die Blueprint A rein und die Variable taucht auf.

    Ohne etwas geändert zu haben.


    Na gut.

    Verstehe ich zwar nicht, aber jetzt kenne ich eine Lösung.

    Hälst du diese für akzeptabel oder ist das eher eine Holzhammermethode?

  • Es gibt da bessere Möglichkeiten. Es ist nicht ganz ohne Grund verpönt und sollte nur im absoluten Notfall eingesetzt werden. Wie auch immer der aussehen mag. Weil jeder Übergriff auf Variablen einer anderen Klasse hat auch immer eine gewisse Unsicherheit und birgt das Risiko zu unerwarteten Ereignissen zu führen.


    Was deinen Timer angeht, gibt es ja zwei Möglichkeiten. Du hast ja leider noch nicht gesagt, wofür du den Timer brauchst. Aber nehmen wir mal an du rufst ein Widget auf, von mir aus mit AGBs oder ähnlichem, und du möchtest das der Benutzer diese nicht gleich weg klickt, sondern der OK-Button erst nach 10 Sekunden oder so anklickbar ist.


    Möglichkeit 1 wäre, das Widget selber beinhaltet den Timer. Das Widget wird gestartet, Button ist inaktiv, nach 10 Sekunden wird er aktiviert.


    Möglichkeit 2, der Timer ist im aufrufenden BP. Hier kannst du den Timer dann dazu bringen ein Event im Widget auszulösen das den Button aktiviert.


    Beide Möglichkeiten sind im jeden Fall sauberer als der direkte Zugriff auf eine boolsche Variable. Denn der direkte Zugriff widerspricht jeglicher Grundlage der objektorientierten Programmierung.

  • Danke für die Belehrung...

    Ich räumte ja selbst ein, dass das nicht der ideale Weg ist.


    Aber bei solch kleinen Sachen zu Testzwecken setze ich das trotzdem ein.

    Wer selbst ohne Schuld zu sein glaubt, der werfe die erste Tastatur oder so...


    Zum Einsatz des Timers:

    Player drückt im Widget Button "Start", Timer startet, verstrichene Zeit wird im Widget angezeigt.

    Player drückt im Widget Button "Pause" oder "Stop", Timer wird angehalten.

    Player ereldigt Task, Blueprint A stopt Timer im Widget mittels der mißratenen Varaible. Diese wird im Widget abgefragt, um zu determinierern, ob der Timer weiter läuft - laufen soll - oder nicht.

    Der Timer wird im Widget gebraucht - Anzeige der verstrichenen Zeit - also platziere ich ihn dort.

    Erschien mir praktikabel.

    Zu Testzwecken allemale.


    Die Frage, welche immer noch im Raume steht, ist die, weshalb die Variable vorher nicht in Blueprint A sichtbar gewesen ist.

    Ob gute OO-Programmierung oder nicht, die Variable hätte in Blueprint A erscheinen müssen, was sie jedoch nicht tat.

    Das stört mich.

    • Hilfreich

    Na klar muss man hier und da auch mal neue Wege ausprobieren, sonst lernt man ja nichts. Was meinst du was ich alles in meinem Projekt ausprobiere? Teilweise habe ich BP die quasi die ganze Arbeitsfläche füllen, dann funktionieren und danach mache ich mich daran das teilweise auf weniger als ein Viertel zu kürzen und zu optimieren.


    Nur eben halt direkter Zugriff auf Variablen über verschiedene Klassen hinweg, das ist immer eine ganz schlechte Idee. Wie gesagt, Fehler sind da quasi in der Programmierung mit inbegriffen. Deswegen hat sich die Programmierung ja in Richtung Objekt orientiert weiter entwickelt, eben halt damit man dergleichen nicht mehr macht. Normalerweise geht man mit globalen Variablen eh sehr sparsam um, wenn nur irgendwie möglich.


    Woran das nun letztendlich lag, warum es zuerst nicht zu sehen war, kann ich dir nicht sagen. Aber die IDE von der Engine hat schon ab und zu mal Schluckauf. Davon können dir hier wahrscheinlich alle ein Lied singen. Oder man ist ab und zu einfach so vertieft das man irgendetwas anderes auch nicht sieht. Ist mir auch schon oft passiert.

  • Na gut, dann suche ich nicht weiter nach der Fehlerursache, auch nicht bei mir.


    >> Oder man ist ab und zu einfach so vertieft das man irgendetwas anderes auch nicht sieht <<

    Absolute Zustimmung, in diesem Falle jedoch nicht.

    Das Projekt ist winzig klein, da kann ich in diesem Zusammenhang nichts übersehen haben.

    Hoffe ich zumindest sehr stark.


    IDE-Schluckaufs kenne ich zur Genüge von UNITY, ich dachte, die Unrealengine wäre dahingehend robuster.

    Obwohl bei solch einem komplexen Monster solche Nichtigkeiten vernachlässigbar sind.


    Ich bekomme die UE jedes Mal zum Absturz wenn ich ein Flipbook erstelle, dieses öffne und ein Sprite per Drag and Drop hinzufügen will.

    Sie stürzt dann zuverlässig ab. Immerhin.


    Danke sehr für eure Hilfe.