2017-03-06 104 views
1

我在虛幻引擎4.15.0中編寫了一個多人遊戲,它幾乎可以工作,除了一條令人毛骨悚然的代碼,我無法弄清楚它的行爲。問題是我有一個從C++基類AOnlinePawn繼承的OnlinePawn Blueprint。無論何時玩家加入比賽,我都會生成此Blueprint並將其轉換爲一個數組,以便不斷更新數據。虛幻引擎C++ SpawnActor演員陣營

問題是試圖將A函數返回的代碼轉換爲AOnlinePawn *會失敗並返回null,這是一個強制轉換問題,因爲它確實會生成。

演員:

playersInstances[i] = Cast<AOnlinePawn>(GetWorld()->SpawnActor(OnlinePlayer->GeneratedClass, &position, &rotator)); 

藍圖參考:

static ConstructorHelpers::FObjectFinder<UBlueprint> OnlinePlayerBP(TEXT("Blueprint'/Game/Blueprints/OnlinePawn.OnlinePawn'")); 
OnlinePlayer = OnlinePlayerBP.Object; 

藍圖的描述,說明父類:

The Blueprint description, stating the parent class.

所以,這裏有什麼問題嗎?無論如何,我可以改進我的工作流程?有一個解決方法?

回答

2

我認爲你的投射線不正確。 SpawnActor是一個模板函數,你不應該像這樣手動進行投射。相反,你應該簡單地給它一個你想要使用的類型。試着這樣說:

AOnlinePawn* NewActor = GetWorld()->SpawnActor<AOnlinePawn>(GetClass(), &position, &rotator); 

編輯:

不客氣。所以,如果你真的想要在代碼中引用藍圖,你可以使用構造函數助手或類查找器。

static ConstructorHelpers::FObjectFinder<UBlueprint> onlineSpawnBP(TEXT("Blueprint'/Game/FirstPersonCPP/Blueprints/OnlineSpawn'")); //replace with the right path to your blueprint in your project 
    if (onlineSpawnBP) 
    { 
     AOnlinePawn* NewActor = GetWorld()->SpawnActor<AOnlinePawn>(GetClass(), &position, &rotator); 
    } 
+0

根據該文檔有[函數的非模板化版本](https://docs.unrealengine.com/latest/INT/API/Runtime/Engine/Engine/UWorld/SpawnActor/6/ index.html),但即使在那裏使用模板版本的例子,所以它看起來像這是推薦的方式 – UnholySheep

+0

還有一件事,這行不在AOnlinePawn類空間,所以GetClass()不會工作(即使是這樣,我想生成繼承AOnlinePawn而不是AOnlinePawn本身的藍圖)。我如何才能獲得與此功能簽名匹配的OnlinePawn藍圖類的引用?順便謝謝@Moums! –

+0

@GabrielGarcia我編輯了我的帖子,我希望它有幫助 – Moums