참고 문서
answers.unrealengine.com/questions/865724/view.html
상황
책 '이득우의 언리얼 C++ 게임 개발의 정석' 389page에 나오는 코드를 따라하다가 발견하게 되었다.
생성자에서 WidgetComponent에 UserWidget을 로드해서 저장해두었다.
static ConstructorHelpers::FClassFinder<UUserWidget> UI_HUD(TEXT("WidgetBlueprint'/Game/Book/UI/UI_HPBar.UI_HPBar_C'"));
if (UI_HUD.Succeeded())
{
HPBarWidget->SetWidgetClass(UI_HUD.Class);
HPBarWidget->SetDrawSize(FVector2D(150.0f, 50.0f));
}
UserWidget을 받아와서 원하는 클래스로 Cast하려니, Cast가 정상적으로 작동하지 않는다.
void AABCharacter::PostInitializeComponents()
{
UABCharacterWidget* CharacterWidget = Cast<UABCharacterWidget>(HPBarWidget->GetUserWidgetObject());
if (nullptr != CharacterWidget) // nullptr 뜸.
{
CharacterWidget->BindCharacterStat(CharacterStat);
}
}
해결
GetUserWidgetObject()를 호출하기 전에, InitWidget()을 호출한다.
HPBarWidget->InitWidget();
UABCharacterWidget* CharacterWidget = Cast<UABCharacterWidget>(HPBarWidget->GetUserWidgetObject());
if (nullptr != CharacterWidget)
{
CharacterWidget->BindCharacterStat(CharacterStat);
}
+ 추가
2023.03.28.
언리얼 4.15에서 4.26으로 프로젝트 업그레이드를 진행하면서, Blueprint에서도 이런 오류가 났다.
Blueprint에서는 InitWidget에 접근할 수 없어서 막막했는데, 그냥 Construction Script의 내용을 Begin Play로 옮겨서 해결했다. 나중에 문제가 생길 수도 있긴한데... 음... 완벽한 해결법은 모르겠다.
'Unreal' 카테고리의 다른 글
[Unreal C++] Behavior Tree 2 (블랙보드 값 이용하기) (0) | 2021.05.11 |
---|---|
[Unreal C++] Behavior Tree 1 (비헤이비어 트리 실행하기) (5) | 2021.05.11 |
[Unreal C++] 액터 컴포넌트 만들기 (0) | 2021.05.10 |
[Unreal C++] 데이터 테이블 만들고, 사용하기 (CSV 파일) (0) | 2021.05.10 |
[Unreal BP & C++] 엔진에서 제공하는 데미지 프레임워크 (1) | 2021.05.06 |