【问题标题】:Unreal C++ / GetActorOfClass虚幻 C++/GetActorOfClass
【发布时间】:2021-08-26 10:36:56
【问题描述】:

我是 Unreal C++ 的新手,我很难找到如何在 C++ 中正确编写 GetActorOfClass(单数,而不是 GetAllActorsOfClass)以便在 BeginPlay 设置对另一个 AActor 的引用。

我已将 GameplayStatics 包含在 AActor A 的标头和 cpp 以及 AActorB.h 的 include 中。

现在,我首先所做的只是在 AActor A 头文件中,声明一个 UPROPERTY(EditAnywhere,BlueprintReadWrite) AActorB*ActorB 以便我可以在编辑器中手动设置 AActor B 但我更愿意设置在 AActor A 的开始播放中使用 GetActorOfClass。

正确的语法是什么?

谢谢

编辑:这是我在 C++ 中尝试做的 BP 版本:

BP Version

编辑 2:我在 C++ 中尝试过的内容

   void ALocalMaster::BeginPlay()
{
    Super::BeginPlay();

    GameManager = static AActor*GetActorOfClass(const UObject*GameManager,TSubclassOf<AGameManager>);
}

【问题讨论】:

  • 请包含您尝试过的最小代码示例。
  • 我添加了一张我在 C++ 中尝试做的 BP 版本的图片
  • staticconst 等类型和修饰符用于声明,而不是调用。这是基本的 C(和 C++),不是 Unreal 特定的。
  • 粘贴的代码表明你也是C++新手,你应该从学习语言开始,至少是基础。另外,这是什么:AActorB*ActorBAActorBActorB 是变量还是类?
  • 它们是演员变量

标签: c++ unreal-engine4


【解决方案1】:

简单的答案,只需使用GetAllActorOfClass 并在必要时将其动态转换为您的演员子类型:

// be sure to use #include "Containers/Array.h" 
// as well as #include "Kismet/GameplayStatics.h"

// Assuming GameManager is of type AMyGameManagerActor*

void ALocalMaster::BeginPlay()
{
    Super::BeginPlay();

    AActor* FoundActor = UGameplayStatics::GetActorOfClass(GetWorld(), 
            AMyGameManagerActor::StaticClass());

    GameManager = Cast<AMyGameManagerActor>(FoundActor);
 
    if(GameManager == nullptr)
    {
        // handle error
    }
    else
    {
        // do stuff with GameManager
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-10-12
    • 2020-09-14
    • 2016-08-07
    • 2019-07-20
    • 2018-05-28
    • 1970-01-01
    • 2017-11-17
    相关资源
    最近更新 更多