虚幻 C++ / GetActorOfClass
Unreal C++ / GetActorOfClass
我是 Unreal C++ 的新手,我很难找到如何在 C++ 中正确编写 GetActorOfClass(单数,而不是 GetAllActorsOfClass)以便在 BeginPlay 设置对另一个 AActor 的引用。
我在 AActor A 的 header 和 cpp 以及 AActorB.h 中包含了 GameplayStatics。
现在,我首先所做的只是在 AActor A header 文件中,声明一个 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>);
}
简单的答案,只需使用 GetAllActorOfClass
并在必要时将其动态转换为您的 actor 子类型:
// 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
}
}
我是 Unreal C++ 的新手,我很难找到如何在 C++ 中正确编写 GetActorOfClass(单数,而不是 GetAllActorsOfClass)以便在 BeginPlay 设置对另一个 AActor 的引用。
我在 AActor A 的 header 和 cpp 以及 AActorB.h 中包含了 GameplayStatics。
现在,我首先所做的只是在 AActor A header 文件中,声明一个 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>);
}
简单的答案,只需使用 GetAllActorOfClass
并在必要时将其动态转换为您的 actor 子类型:
// 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
}
}