Zugriff auf ein Script das auf einem Actor liegt?

  • Hallo zusammen,


    ich bin neu hier und auch seit knapp 3 Tagen neu in der Unreal Engine. Komme aus der Unity Community, ja aber mehr dazu im Vorstellungs Thread :)


    Ich habe eine Frage, ich möchte ein Login realisieren, dass wenn ich auf ein Button klicke, ich eine Funktion auslöse.


    Ich habe es auch soweit geschafft, mein Problem ist nur, wie greife ich auf ein vorhandenen Actor zu.
    Auf diesem liegt nämlich die Verbindung zum Login Socket Server, dieser beinhaltet auch eine Funktion zum senden von Nachrichten.


    Ich habe eine Funktion von Unreal gefunden um Objekte zu suchen, klappt auch, aber ich glaube ich greife nicht auf das Script in meiner Szene zu, sondern bewege mich in einer eigenen Instanz, denn der Socket ist leer und hat keine Verbindung aufgebaut.


    So sieht mein Konstrukt aus:


    LoginServer (Actor)


    .h

    Code
    private:
        void SendMessage(FString serialized);
    public:
        void LoginPlayer(FString _username, FString _password);


    .cpp



    Und das ist meine UMG Blueprint Funktion, dass was ausgelöst wird, wenn ich auf den Button drücke.


    .h

    Code
    public:    
        UFUNCTION(BlueprintCallable, meta = (DisplayName = "Login Player", CompactNodeTitle = "Login Player", Keywords = "Login Player"), Category = Game)
        static void LoginPlayer(FString _username, FString _password);


    .cpp


    Also meine einzige Erklärung ist, dass ich mich in einer eigenen Instanz bewege, hoffe mir kann jemand helfen.


    Ps.: Das senden an den Socket Server funktioniert, habe das mit einem Timer getestet.

  • Ich kann dir leider nicht sagen, warum du nicht das richtige Objekt bekommst, aber ich persönlich finde die Herangehensweise etwas "von hinten durch die Brust". Ein Actor ist per Definition ein GameObject, ich gehe aber nicht davon aus, dass du deinen "LoginServer" in der Welt platzieren willst. Deswegen wäre hier meiner Meinung nach ein "UObject" logisch Sinnvoller.
    Deinen LoginServer könntest du dann z.B. in der GameInstance definieren und darüber von überall korrekt drauf zugreifen.

  • Ich bin nicht sicher ob ich deine Frage richtig verstanden habe, aber mit GetAllActorsFromClass bekommst du ein Array mit eben allen Objekten der übergebenen Klasse, die sich gerade in der aktuellen World befinden. Dafür muss dein Actor aber natürlich in der Welt gespawnt werden.


    EDIT: Ich würde auch stark davon abraten, einen Actor zu benutzen, es gibt einige Klassen die dafür besser in Frage kommen (hab jetzt grad keine im Kopf, bin unterwegs).

  • Es tut mir Leid, dass ich echt diese dumme Frage stellen muss. Aber wie erstelle ich ein UObject?
    Soll ich eine leere Klasse über den Editor erstellen lassen und dann draus ein UObject machen?

  • Tu dir einen gefallen und veranker dein socket object in der gameinstance. Die ist persistent auch nach levelwechsel. Desweiteren sie dir an wie man uobjects ordentlich läd und entläd sonst ist der crash vorprogrammiert. Wichtig ist auch das object vor der gc zu verstecken, einfaches referenzieren hilft da nicht :D