【问题标题】:Unreal Engine C++ SpawnActor Cast虚幻引擎 C++ SpawnActor Cast
【发布时间】:2017-03-06 07:21:02
【问题描述】:

我正在使用 Unreal Engine 4.15.0 编写一个多人游戏,它几乎可以正常工作,除了一行我无法弄清楚它的行为的怪异代码。问题是我有一个继承自 C++ 基类 AOnlinePawn 的 OnlinePawn 蓝图。每当玩家加入比赛时,我都会生成此蓝图并将其投射到我不断更新接收数据的数组中。

问题是以下代码尝试将函数返回的 AActor* 强制转换为 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;

蓝图描述,说明父类:

那么,这里有什么问题?无论如何我可以改善我的工作流程?有解决办法吗?

【问题讨论】:

    标签: c++ unreal-engine4


    【解决方案1】:

    我认为你的演员阵容不正确。 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); 
         }
    

    【讨论】:

    • 根据文档有 non-templated versions of the function 但即使是那里的示例也使用模板版本,所以看起来这是推荐的方式
    • 还有一件事,这条线不在 AOnlinePawn 类空间中,所以 GetClass() 不起作用(即使是,我想生成继承 AOnlinePawn 的蓝图而不是AOnlinePawn 本身)。如何获得与此函数签名匹配的 OnlinePawn 蓝图类的引用?顺便谢谢@Moums!
    • 为更多读者更正了帖子,感谢大家的帮助!
    猜你喜欢
    • 2018-09-01
    • 2015-10-12
    • 2020-09-14
    • 2016-08-07
    • 2022-06-28
    • 2019-07-20
    • 2018-05-28
    • 2020-07-24
    • 2015-02-04
    相关资源
    最近更新 更多