问题描述
在游戏模式基类中,我创建一个分配给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中有效。在将HUDClass
和DefaultPawnClass
使用将要初始化的位置初始化之后(我个人将它们放在“游戏模式基本构造器”中):
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]);
然后defaultPawn
和defaultHUD
都可以以简单的方式调用和使用,例如:
defaultPawn->YourActorsFunction();
我希望这可以节省人们的时间并且有用。