ActorBP in anderem Blueprint an Socket anbinden

  • Hallo und einen schönen Abend, ich habe da ein kleines Problem,


    ich versuche mithilfe eines Structure ein Bp in einem anderen Bp aufzurufen und diese an Sockets im zweiten Bp anzubinden. Als Test habe ich ein Socket im Static Mesh des zweitem Bp eingebaut.

    Im Structure versuchte ich das Aufrufen des ersten BP als Variable (Actor, Static Mesh Actor, etc...) einzufügen, jedoch schlug dabei jeder Versuch fehl, da ich leider nicht genau weiß als welche Variable ich denn meinen ersten Blueprint deklarieren soll.

    In zweitem Blueprint habe ich an den event Begin Play ein Attach Actor to Component mit einem Get(Variable Structure/ Break Struc) an Target und das Static Mesh des zweiten BP mit dem Socket an Parent verknüpft.

    Nun weiß ich eben nicht, wie ich mein MasterBP im Structure deklarieren soll damit ich es im zweiten BP an den Socket binden kann.

    Vielleicht könnt ihr mir ja dabei helfen.

    Ich wünsche euch einen schönen Abend und viel Erfolg,

    Ciao Marc

  • Ich habe wieder ein kleines Problemchen und hoffe ihr könnt mich aufklären. Gestern hat es noch funktioniert, heute nicht mehr. Ich versuchte nun Pflanzen auf meinem Feld zu attachen, er sagt mir aber immer: Variable is not in scope.

    Denke, dass Problem liegt im Break Struc, da ab da er keine Daten im debug modus mehr hat und ab diesem Zeitpunkt er mir bei jedem Value eben sagt: Value not in scope.

    Hier ein kleines Bildchen. Vielleicht könnt ihr mich aufklären. Würde nur zu gerne wissen, was da los ist. Danke für euer Interesse und alles Gute.


    Ciao Marc

  • In einer Funktion ist eine Variable ist ab diesem Zeitpunkt gültig ab dem sie gesetzt wurde und maximal nur solange wie die Funktion ausgeführt wird.


    Funktion bedeutet: Du drückst auf einen Knopf, die Funktion wird ausgeführt, die Variablen werden gelesen und die Funktion arbeitet bis zum Schluss. Dann ist die Funktion abgeschlossen.


    Du kannst nicht während die Funktion arbeitet, die Variable von außen ändern.


    Das wäre wie wenn du beim Hausbau den Keller errichtest und während der Bau läuft die Pläne veränderst. Du müsstest dann nochmal von vorne beginnen.


    Ich denke das wird das Problem sein aber vielleicht kann das jemand anderst besser erklären.

  • Jetzt zeigt er mir nicht einmal mehr die Werte an.

    Habe die Variable aus der Funktion herausgenommen und im Constructtab vor der Funktion eingefügt.

    Er zeigt mir zwar nicht an, dass die Variable not in scope ist, aber er ezigt er auch so gar nichts mehr an. Und das attachen vom actor an das Blueprint funktioniert auch nicht mehr.

    Vielleicht könnt ihr mich ja aufklären was ich falsch gemacht habe. Jede Hilfe wäre gerne gesehen. #

    Danke für das Interesse und eure Zeit


    Habt einen schönen Tag und alles Gute, ciao

  • Kann es sein das die Variable leer ist zu dem Zeitpunkt wo die Funktion ausgeführt wird ?


    Geb der Varaible doch einfach mal einen deafult wert und prüfe ob sie dann ausgeführt wird.


    Ich Prinzip soll die Funktion erst ausgeführt werden wenn etwas in der Variable drin steht. Ist die Variable leer, muss auch nichts berechnet werden.

    Dies mit einem Branch abfragen. Ist die Variable da , dann ist sie True ist sie nicht da dann False. Wenn True, dann die Funktion ausführen und wenn false die Funktion nicht ausführen.

  • In dem Default wert der Variablen ist eigentlich ein Actor platziert. Der Master des Plantactors. Ist aber auch egal welchen Wert ich einfüge, da er mir keinen Actor im Editor anzeigt.


    Gestern hat er mir noch Actors angezeigt. Habe aber im Struct die Class reference ausgetauscht und seitdem funktioniert es nicht mehr.


    Naja, aber danke für den Tipp. Wäre nicht das erste Mal, wenn es an solch einem Fehler liegen würde.


    Danke, ciao

  • Das ist der süße kleine Blueprint mit dem ich kämpfe. Bin nun soweit, dass ich aufgebe den Actor in einer Funktion aufzurufen. Im englischen Forum steht nämlich, dass ich, wenn ich die Anmerkung "Variable is not in scope" bekomme, dies über ein Funktion lösen kann. Hab ich aber nicht hinbekommen. Stattdessen bekam ich eben in der Funktion diese Meldung. Nun weiß ich aber schon, dass falls ich diesen Blueprint in der Welt platziere und dort in den Default Settings den Actor ändere, Unreal mir auch die Variable in PLant Struc ändert. Dies sollte aber nicht der Fall sein, da ich ja eigentlich hier im Blueprint nur die Möglichkeit geben möchte einen Actor an einen Socket dieses Blueprints zu attachen, da ich das Blueprint ja öfters in der Welt platzieren möchte und mit immer anderen Actors attachen.

    Was mich aber am meisten verwundert ist, dass es schon eimmal funktioniert hat, und nun da ich im Struct die Classreference geändert habe, dies nicht mehr funktioniert.

    Ich verstehe echt nurmehr Bahnhof.

    Vielleicht könnt ihr mir ja helfen. Wäre echt super und würde mich einen ordentlichen Schritt weiterbringen. Falls nicht, ich werde weiter herumprobieren, nur ob ich es schaffe ist fraglich.


    Danke auf jeden Fall für eure Zeit. Ich hoffe ihr habt mehr Erfolg mit euren Projekten.


    Danke und noch einen schöne Woche, euer MacArmand

  • GetActorOfClass ist nach meiner Meinung die sinnloeseste Funktion aller Zeiten. Diese Funktion sucht im Level alle arten von Actors die von der Class, die als Eingang gesetzt wurde, gefiltert wird. Das bedeutet, wenn im Level ein Actor steht und die heißt Blume und GetActorOfClass wird im Level Blueprint ausgeführt und die Funktion hat den Eingang Blume. Dann werden alle Actors gesucht die den Namen Blume hat. Der Class Eingang ist nur sowas wie ein Suchfeld, wonach es suchen soll. Die Blume wurde nun gefunden und wird als Blume Actor als variable ausgegeben. Jetzt kommt das sinnlose an dieser Funktion. Sind 3 Blumen als actor in der welt, dann sucht die Funktion nach alle Actors die den Namen Blume haben und gibt irgend eine Blume als variable aus. Man weis jetzt also nicht, welche Blume er gewählt hat.

    GetAllActorsOfClass sucht auch nach alle Actors die als Class eingestellt sind und geben alle gefundene Actors als Array aus. Damit kann man also speziel eine Blume ansprechen.


    Eine Class Datei zu nutzen um dieses Actor in der Welt anzusprechen funktioniert nicht. Class Dateien sind eher Rohe daten die in der Welt nicht sind. Sie werden eher nur gelesen und als Actor in der Welt platziert. Class sind alle in deinem Content.


    Wenn du eine Variable erstellst, zb Actor als Class Referenz. Dann bemerkt du, dass man die Class auswählen kann für die Variable. Solltest du eine Variable als Actor Objekt erstellen, dann kann man kein Wert für die Variable einstellen. Mit einer Actor Class variable kann man nur sachen verwenden, wie actor spawnen, oder nach actors suchen. Wenn du einen Actor Objekt hast, dann kann der direkt mit dem Actor verlinkt werden. Das geht aber nur, wenn einer dieses Actor gefunden hat, und in den Actor Objekt gesetzt hat. Erst dann ist diese Variable gefüllt und hat ein direkten Bezug zum Actor, die man immer ansprechen möchte. zB führe dies und das aus.


    Dein BP macht praktisch nichts anderes, suche nach diesem Actor und gebe irgend ein actor, falls mehrere vorhanden sind, als variable aus. Hier schaut es so aus, als wurde kein Actor gefunden. Also ist der ausgabe wert vom GetActorOfClass NULL. Somit ist nichts vorhanden. Ist nur ne Vermutung, Value Not in Scope hatte ich bestimmt auch mal als Fehlermeldung, aber kann sie jetzt zu nichts zuordnen. Wenn der Wert NULL ist, wird eher ein Error kommen das der Wert NULL ist. Jede Funktion reagiert aber unterschiedlich, wenn ein Wert NULL ist.