์ธ๊ฐ๋ณด๋ฉด์ UI๊ด๋ จ๋ ๊ธฐ์ด ๊ณต๋ถํ๋ค๊ณ ๋ง์ ธ๋ณด๋๋ฐ
//ํค๋
class UWidgetComponent* HpBar;
//CPP
void AMyCharacter::PostInitializeComponents()
{
Super::PostInitializeComponents();
HpBar->InitWidget();
auto HpWidget = Cast<UMyCharacterWidget>(HpBar->GetUserWidgetObject());
UE_LOG(LogTemp, Warning, TEXT("%d"), HpWidget);
if (HpWidget)
{
UE_LOG(LogTemp, Warning, TEXT("1"));
HpWidget->BindHp(Stat);
}
}
์ฝ๋๊ฐ ๋๋ต ์ด๋ฐ์์ธ๋ฐ
UI๊ฐ ์ ๋๋ก ๋์์์ํด์ ๋ก๊ทธ์ฐ์ด๋ณด๋๊น ์๊พธย HpWidget๊ฐ null ์ฐํ๋๋ฐ ์ด์ ๊ฐ ๋ญ๊น์?
๋ฐ๋ก ๊ตฌ๊ธ๋งํ์๋ย InitWidget์ผ๋ก ์์ ฏ์ด๊ธฐํ๋ฅผ ํด์ค์ผ๋๋ค๋๋ฐ ์ด๋ฏธ ํด์ค์ํ์ธ๋ฐ ์๋๊ณ
Build.cs์ UMG ์ถ๊ฐํด์ ๋น๋๋ํ๊ณ ย
์ธ๊ฐ ์ค์ต์๋ฃ ๋ฐ์๋ค ์คํํด๋ดค์๋ ์๋์ ๊ฑฐ๊ธฐ์๋ ์ฝ๋ ๊ทธ๋๋ก ๋ณต๋ถ๋ ํด๋ดค๋๋ฐ ์ ํ๋ก์ ํธ์์ ์๋๋ค์
์์ ฏ์ฌ์ฉํ ๋ Build.cs์ UMG ์ถ๊ฐํด์ฃผ๋๊ฑฐ๋ง๊ณ ๋ฐ๋ก ์์
ํด์ผ๋๋๊ฒ ์์๊น์?
์์ง๋ฒ์ ์ 4.26.2 ์ฐ๊ณ ์์ต๋๋ค. 4.27๋ก ํ๋ก์ ํธ ๋ฒ์ ๊ต์ฒด๋ ํด๋ดค๋๋ฐ ๋ฌ๋ผ์ง๋๊ฒ์๋ค์
์ ๊ณต๋ ์ฝ๋์์ null ๊ฐ์ด ๋ํ๋๋ ์ด์ ๋ HpBar ๋ณ์๊ฐ ์ด๊ธฐํ๋์ง ์์๊ฑฐ๋ ์ฌ๋ฐ๋ฅด๊ฒ ์ค์ ๋์ง ์์๊ธฐ ๋๋ฌธ์ผ ๊ฐ๋ฅ์ฑ์ด ์์ต๋๋ค
Hpbar๊ฐ UWidgetComponent๋ฅผ Createํด์ ์ฐ๊ฒฐํ๊ฒ ๋์ด์์ด์ ์ผ๋จ ๊ทธ๋๋กํด๋ดค๋๋ฐ UI๊ฐ ์ธ๊ฒ์ ํ์๊น์ง๋ ์๋๋๋ฐ
auto HpWidget = Cast(HpBar->GetUserWidgetObject()); ์ด๋ถ๋ถ์ด Null์ด๋์ค๋ค์
์์ ฏ ํด๋์ค๋ ์ค์ ํ์ด?
castํ๋ ํด๋์ค ๋ง์ํ์๋๊ฑฐ๋ฉด ๋ค๋ง๋ค์ด๋จ์ด์ ํน์๋ชฐ๋ผ์ ์ธ๊ฐ ํ์ต์๋ฃ ๋ฐ์๋ค ์ฝ๋๋ณต๋ถ๋ ํด๋ดค๋๋ฐ ๋๊ฐ์ด null๋์ค๋ค์
์ผ๋จ ์ฝ๋๋ฌธ์ ์ธ๊ฐ ํ์ธํด๋ณด๋ ค๊ณ ๊ฐ์ข์ฝ๋๋ฅผ ๋ณต๋ถํด์ ๋ฃ์ด๋ดค๋๋ฐ ๊ฒฐ๊ณผ๊ฐ ๋๊ฐ๋๋ผ๊ตฌ์ ์ด๊ฒฝ์ฐ์ ๋ญ๊ฐ๋ฌธ์ ์ธ์ง๋ชจ๋ฅด๊ฒ ์ด์ ์ง๋ฌธ๋จ๊ฒผ์ต๋๋ค
์๋ ์์ ฏ ์ปดํฌ๋ํธ์ ์์ ฏ ํด๋์ค๋ฅผ ์ค์ ํด์ผ ํ์์
SetWidgetClass ์ด๊ฑฐ๋ง์ํ์๋๊ฑฐ๋ฉด ์์ ฏ ๋ธ๋ฃจํ๋ฆฐํธ์ธ๊ฐ ์์ฑํด์ ๊ทธ๊ฑฐ๋ ์ฐ๊ฒฐํด์ ์ธํ ํด๋จ์ด์
์ธ๊ฒ์ Hp๋ฐ์์ฑ๊น์ง ์๋๋๋ฐ Cast(HpBar->GetUserWidgetObject()) ์ด๋ถ๋ถ์ด ๊ณ์ nullptr์ด ์ฐํ๋ค์
์บ์คํ ํ์ ์๋๋๊ฑฐ๋ฉด ํ์ ์ด ์๋ง๋๊ฑฐ์ UMyCharacterWidget์ด๊ฑฐ ๋ง์?
๋ค ํด๋์ค ์ด๋ฆ์ผ๋ก ์ฐธ์กฐํ๋ฉด ์๋์ค๋๊ฑฐ๋ณด๋ฉด ์คํ๋ธ๊ฑด ์๋๊ฑฐ๊ฐ์๋ฐ.. ์ด์ ๋ฅผ๋ชจ๋ฅด๊ฒ ๋ค์
๊ตฌ๊ธ๋งํ์๋ CAST์์ NULL๋จ๋ฉด InitWidget์ ์ํด์ค์ ๊ทธ๋ ๋ค๋๋ฐ ์ ๋ ์ด๋ฏธ ํด์ค์ํ๋ผ.. ๊ทธ์ธ์ ์ ๋ณด๋ฅผ ์ฐพ์์๊ฐ์๋๋ผ๊ตฌ์
์๋ ๋ธ๋ฃจํ๋ฆฐํธ์ธ๊ฐ ์์ฑํด์ ์ฐ๊ฒฐํ๋ค๋ ๊ทธ ์์ ฏ์ด MyCharacterWidget ๋ง๋๊ณ
์์ ฏ ๋ธ๋ฃจํ๋ฆฐํธ ์ด์์๋ ์ค๋ฅธ์ชฝ ์์ ParentClass: MyCharacterWidget ์ด๋ผ๊ณ ๋ธ?
์์ ฏ๋ธ๋ฃจํ๋ฆฐํธ์ด์์๋ ๋จ๋๊ฑด UserWidget์ด์์ UMyCharacterWidget์๋ UserWidget์์๋ฐ์์ C++๋ก ๋ฐ๋ก๋ง๋ค์๊ตฌ์
๊ทธ๋ฌ๋ฉด ์๋. ๋ ๊ทธ ์์ ฏ ์ฐ ์๋ํธ ์ฐฝ์์ File->Reparent Native Base Class ํ๋ค์์ ๋จ๋ ์ฐฝ์์ MyCharacterWidget์ด๋ผ๊ณ ์ ๋ ฅํด์ ๋ฐ๊ฟ
์ ์์ ฏ ๊ทธ๋ํ์ ๋ถ๋ชจํด๋์ค ๋ณ๊ฒฝํ๋๊ฒ์์ด์ ๋ฐ๊ฟ๋ดค๋๋ ์๋๋ค์ ๊ฐ์ฌํฉ๋๋ค ใ