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

问题描述

在游戏模式基类中,我创建一个分配给HUDClass的对象。 HUD可以正常工作,但是我似乎无法访问其任何需要发回代码的成员函数在这一点上,我已经尝试了所有事情,并且完全陷入困境。看来无论我做什么,指向该对象的指针似乎都变为NULL。我正在使用UE4.25.3。

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

这是我尝试过的一些方法,除了访问不需要内部变量的成员外,所有其他方法均无效。我列出了最有前途的两个。无论我尝试什么,语句if (defaultHUD)总是返回false,如果我尝试访问它,它将使UE4崩溃。

defaultHUD = HUDClass->GetClass();

defaultHUD = Cast<AKeyHUD>(HUDClass);

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

解决方法

我想出了一个解决方案,可以从Game Mode Base类中同时引用任何actor对象和HUD,这在使用C ++的Unreal Engine 4.25中有效。在将HUDClassDefaultPawnClass使用将要初始化的位置初始化之后(我个人将它们放在“游戏模式基本构造器”中):

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

然后要获得对HUD的引用,以下代码将在您的HUD类名称为AMyHUD的情况下工作,并且可以在包括StartPlay()在内的许多地方调用:

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

这是获得附着到第一个玩家控制器的HUD,尽管更改数字会更改从哪个玩家控制器获取引用的。

现在可以使用以下代码对类的任何参与者进行引用,这些代码也可以放置在StartPlay()中:

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

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

然后defaultPawndefaultHUD都可以以简单的方式调用和使用,例如:

defaultPawn->YourActorsFunction();

我希望这可以节省人们的时间并且有用。