2017-03-06 99 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