1) 위젯 생성
Progress bar를 이용해 간단한 체력 바 생성.
2) AI에 연결하기
- AICharacter에 위젯 연결하기(블루프린트에서 사용가능하게 설정)
UPROPERTY(VisibleAnywhere, Category = "UI")
UWidgetComponent* HealthBarComponent;
UPROPERTY(EditDefaultsOnly, Category = "UI")
TSubclassOf<UUserWidget> HealthBarClass;
ANXNonPlayerCharacter::ANXNonPlayerCharacter()
{
HealthBarComponent = CreateDefaultSubobject<UWidgetComponent>(TEXT("HealthBar"));
HealthBarComponent->SetupAttachment(RootComponent);
// (Widget Space -> World 로 설정) 3D월드에 배치하기위함.
HealthBarComponent->SetWidgetSpace(EWidgetSpace::World);
// 크기
HealthBarComponent->SetDrawSize(FVector2D(200, 20));
// 위치
HealthBarComponent->SetRelativeLocation(FVector(0.f, 0.f, 100.f));
}
if (HealthBarComponent && HealthBarClass)
{
UUserWidget* HealthBarWidget = CreateWidget<UUserWidget>(GetWorld(), HealthBarClass);
if (HealthBarWidget)
{
HealthBarComponent->SetWidget(HealthBarWidget);
}
}
}
- UpdateHealthBar라는 변수를 만들어 체력이 갱신되게 하기
void ANXNonPlayerCharacter::UpdateHealthBar()
{
if (HealthBarComponent)
{
UUserWidget* Widget = HealthBarComponent->GetWidget();
if (Widget)
{
// GetWidgetFromName(TEXT("HealthBar")) → UMG에서 프로그래스 바를 가져오기
// **에디터에서 지정한 이름이랑 잘 맞추기**
UProgressBar* HealthBar = Cast<UProgressBar>(Widget->GetWidgetFromName(TEXT("HealthBar")));
if (HealthBar)
{
float HealthPercent = GetCurrentHealth() / GetMaxHealth();
HealthBar->SetPercent(HealthPercent);
}
}
}
}
- TakeDamage에서 UpdateHealthBar를 추가해 업데이트 해주기
정상적으로 뜨는 것 확인.