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
private:
void SendMessage(FString serialized);
public:
void LoginPlayer(FString _username, FString _password);
.cpp
void UMasterServerConnection::LoginPlayer(FString _username, FString _password)
{
FString serialized = (TEXT("%s|%s"), *_username, *_password);
//GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::Red, FString::Printf(TEXT("%s"), *serialized));
SendMessage(serialized);
}
void UMasterServerConnection::SendMessage(FString _serialized)
{
TCHAR *serializedChar = _serialized.GetCharArray().GetData();
int32 size = FCString::Strlen(serializedChar);
int32 sent = 0;
bool successful = Socket->Send((uint8*)TCHAR_TO_UTF8(serializedChar), size, sent);
if (successful)
{
GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::Yellow, FString::Printf(TEXT("Gesendet")));
}
else{
GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::Yellow, FString::Printf(TEXT("Nicht Gesendet")));
}
}
Alles anzeigen
Und das ist meine UMG Blueprint Funktion, dass was ausgelöst wird, wenn ich auf den Button drücke.
.h
public:
UFUNCTION(BlueprintCallable, meta = (DisplayName = "Login Player", CompactNodeTitle = "Login Player", Keywords = "Login Player"), Category = Game)
static void LoginPlayer(FString _username, FString _password);
.cpp
void UMenu::LoginPlayer(FString _username, FString _password) //This will be called, when the button will be pressed
{
for (TObjectIterator<UMasterServerConnection> Itr; Itr; ++Itr)
{
if (Itr->GetName() == "MasterServerConnection")
{
Itr->LoginPlayer(_username, _password);
break;
}
}
}
Alles anzeigen
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.