UE4 C Получает ссылку на HUDClass после его инициализации

#c #unreal-engine4 #unreal-development-kit

#c #unreal-engineer4 #unreal-development-kit

Вопрос:

В моем базовом классе игрового режима я создаю объект, который присваивается HUDClass . HUD работает правильно, но тогда я, похоже, не могу получить доступ ни к одной из его функций-членов, которые требуют отправки кода обратно. На данный момент я перепробовал абсолютно все и полностью застрял. Кажется, что бы я ни делал, указатель на объект становится НУЛЕВЫМ. Я использую UE4.25.3.

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

Вот некоторые вещи, которые я пробовал, но все они не работают, за исключением доступа к его членам, которые не требуют внутренних переменных. Я включил два наиболее перспективных. Независимо от того, что я пытаюсь, оператор if (defaultHUD) всегда возвращает false, и если я пытаюсь получить к нему доступ, происходит сбой UE4.

 defaultHUD = HUDClass->GetClass();

defaultHUD = Cast<AKeyHUD>(HUDClass);
  

Если кто-нибудь может мне помочь, я был бы очень признателен.

Комментарии:

1. в каком классе находится нижний фрагмент кода? класс игрового режима?

2. Нижний код также находится в базовом режиме игры, хотя я нашел решение проблемы, которое я сейчас опубликую, спасибо.

Ответ №1:

Я нашел решение для получения ссылки как на любой объект actor, так и на HUD из базового класса игрового режима, это работает в Unreal Engine 4.25 с использованием C . После инициализации 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();

Я надеюсь, что это поможет сэкономить время людей и будет полезно.