#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();
Я надеюсь, что это поможет сэкономить время людей и будет полезно.