Ich schreibe ein Multiplayer-Spiel in Unreal Engine 4.15.0 und es funktioniert fast außer für eine verdammte Codezeile, die ich nicht herausfinden kann, ist das Verhalten. Das Problem ist, dass ich einen OnlinePawn Blueprint habe, der von einer C++ Basisklasse AOnlinePawn erbt. Immer wenn ein Spieler dem Match beitritt, spawne ich diesen Blueprint und wirf ihn in ein Array, das ich ständig aktualisiere.Unreal Engine C++ SpawnActor Cast
Das Problem ist, dass der folgende Code, der versucht, AActor * von der Funktion zu AOnlinePawn * umgewandelt wird, fehlschlägt und null zurückgibt, es ist ein Umwandlungsproblem, da es tatsächlich erzeugt wird.
Die Besetzung:
playersInstances[i] = Cast<AOnlinePawn>(GetWorld()->SpawnActor(OnlinePlayer->GeneratedClass, &position, &rotator));
Der Bauplan Referenz:
static ConstructorHelpers::FObjectFinder<UBlueprint> OnlinePlayerBP(TEXT("Blueprint'/Game/Blueprints/OnlinePawn.OnlinePawn'"));
OnlinePlayer = OnlinePlayerBP.Object;
The Blueprint Beschreibung, Angabe der übergeordneten Klasse:
Also, was ist das Problem? Ich kann meinen Workflow trotzdem verbessern. Es gibt einen Workaround?
Nach der docs gibt es [Nicht-Template-Versionen der Funktion] (https://docs.unrealengine.com/latest/INT/API/Runtime/Engine/Engine/UWorld/SpawnActor/6/ index.html) aber auch das Beispiel dort verwendet die Vorlagenversion, also sieht es so aus, als wäre die empfohlene Methode – UnholySheep
Es gibt nur noch eine Sache, diese Zeile befindet sich nicht im Klassenraum von AOnlinePawn, also wird GetClass() nicht funktionieren (selbst wenn es so wäre, möchte ich den Blueprint hervorbringen, der AOnlinePawn und nicht die AOnlinePawn selbst erbt. Wie kann ich einen Verweis auf die OnlinePawn-Blueprint-Klasse erhalten, die dieser Funktionssignatur entspricht? Übrigens danke @Moums! –
@GabrielGarcia Ich habe meinen Beitrag bearbeitet, ich hoffe es hilft – Moums