UE4 C++ 在初始化后获取对 HUDClass 的引用

UE4 C++ Getting a reference to HUDClass after it has been initialized

在我的游戏模式基础中 class 我创建了一个分配给 HUDClass 的对象。 HUD 工作正常,但我似乎无法访问它的任何需要发回代码的成员函数。在这一点上,我已经尝试了一切,但完全被卡住了。似乎无论我做什么,指向对象的指针似乎都变成了 NULL。我用的是UE4.25.3.

void AGameModeBase::InitGame() {
       HUDClass = AKeyHUD::StaticClass();
}

以下是我尝试过的一些方法,除了访问其不需要内部变量的成员外,它们都不起作用。我包括了最有希望的两个。无论我尝试什么语句 if (defaultHUD) 总是 returns false 如果我尝试访问它它会使 UE4 崩溃。

defaultHUD = HUDClass->GetClass();

defaultHUD = Cast<AKeyHUD>(HUDClass);

如果有人能帮助我,将不胜感激。

我想出了一个解决方案,可以从游戏模式基础 class 中获取对任何演员对象和 HUD 的引用,这在 Unreal Engine 4.25 中使用 C++ 有效。使用将要初始化的位置初始化 HUDClassDefaultPawnClass 后(我个人将它们放在 Game Mode Base Constructor 中):

HUDClass = AMyHUD::StaticClass();
DefaultPawnClass = APlayerPawn::StaticClass();

然后为了获取对 HUD 的引用,假设您的 HUD Class 名称为 AMyHUD 并且可以从许多地方调用,包括 StartPlay():

defaultHUD = Cast<AMyHUD>(UGameplayStatics::GetPlayerController(this,0)->GetHUD());

这样做是获取附加到第一个玩家控制器的 HUD,尽管更改数字会改变从哪个玩家控制器获取参考。

现在要获取对 class 的任何演员的引用,以下代码有效,也可放置在 StartPlay() 中:

TArray<AActor*> FoundPawns;
UGameplayStatics::GetAllActorsOfClass(GetWorld(), APlayerPawn::StaticClass(), FoundPawns);

defaultPawn = Cast<APlayerPawn>(FoundPawns[0]);

defaultPawndefaultHUD 都可以直接调用和使用,例如:

defaultPawn->YourActorsFunction();

我希望这有助于节省人们的时间并且很有用。