Probleme beim zugreifen/berbeiten auf Variablen von anderen Blueprints. (Accessed None trying to read...)

  • Hey,
    ich habe im Frühjahr diesen Jahres angefangen, hin und wieder mal in UE4 an Projekten zu arbeiten.
    Von einigen Dingen habe ich inzwischen durchaus eine Ahnung, aber ich schaffe es nicht, Variablen aus einem anderen Blueprint auslesen zu lassen, beziehungsweise diese von einem anderen Blueprint aus zu berabeiten.
    Der Fehler ist der "Accessed None trying to read property CameraPawnREF from function: ...".


    Im Main_UMG öffne ich das Character_UMG, welches theoretisch, beim öffnen, die Integer Variable aus der CameraPawnREF nutzen soll, damit die Levelanzeige beim öffnen des Character_UMG aktualisiert wird.
    Leider gibt es den Fehler und die Levelanzeige zeigt 0 Level an, obwohl die Variable einen Wert von 5 hat.
    Das Main_UMG wird beim Spielstart im CameraPawnController geöffnet.



    Ich hoffe es ist verständlich genug, und ihr habt eine Lösung :)


    Viele Grüße
    SaDoOx

  • Zitat von Socke

    Wo setzt du CameraPawnREF?


    Inwiefern noch setzen?
    Mein CameraPawn existiert doch von Beginn an im Level. Von diesem ziehe ich dann im Character_UMG die Referenz.
    Oder muss ich in einem Blueprint noch ein "Set" haben? =O
    Wenn ja, würde das vielleicht einiges erklären..

  • Du musst die Refferenz aus dem BP holen, wo die Variable tatsächlich gesetzt wird. Entweder über eine CastTo oder ein Interface.


    Widgets zeigen nichts an, wenn du die Variablen nicht ausliest. Beispiel Gesundheit: Die Gesundheit setzen die meisten im CharacterBP. Also muss entweder das Widget die Variable Health aus dem CharacterBP holen oder du versendest sie aus dem CharacterBP an das Widget.


    Stell dir das so vor. Jedes Widget und der BP ist ein Kind mit seinen Eigenheiten. Wenn du willst, dass die Kinder zusammen spielen, dann müssen sie auch miteinander kommunizieren. Ohne Kommunikation sind es einfach nur niedliche Kinder aber eben keine zusammenspielenden Kinder.

  • Benutze in deinem PlayerController CreateWidget und promote es zu einer Variable, als Beispiel Main_UMG und Character_UMG.
    Nun kannst du überall folgendes machen, GetPlayerController->CasTo (Deinem Controler), danach kannst du am Blauen pin GetMain_UMG bekommen und schon hast du auf alles zugriff.
    Bitte daran denken den Hacken oben rechts herauszumachen sonst wird GetMain_UMG nicht gefunden. :)

  • Wenn du eine Variable erstellst, bspw. MyCharacterRef, dann ist in dieser Variable erstmal nix drinn, denn du musst sie noch füllen indem zu deine CharacterDaten in dieser Variable eben gerade abspeicherst. Nur weil du eine Variable in irgendeiner Form als XYRef bezeichnest, ensteht keine Beziehung. Typischerweise macht man dass, damit man nicht ständig mit CastTo oder sontigen BPKommunikationmitteln arbeiten muss.


    Wenn du eine solche selbst erstellte ReferenzVariable veränderst, musst du sie am ende der Logik auch wieder an das AusgangsBP versenden, damit die Veränderung auch wirksam wird. Lässt sich blöd erklären... Vielleicht mal ne TS-Session über das Thema..... Da kann ich dir das besser erklären.