BB프로젝트 8일차

김재혁·2025년 2월 27일

일정

  • AI 상단에 체력바(UI) 활성화
  • 에셋 설정 (AI / Character -> Mesh, Animation)
  • 적절한 애니매이션 적용( 공격 / 사망)

체력바

  • 몬스터 위에 체력바 활성화 시키기

1) 위젯 생성

Progress bar를 이용해 간단한 체력 바 생성.

2) AI에 연결하기

  • AICharacter에 위젯 연결하기(블루프린트에서 사용가능하게 설정)
UPROPERTY(VisibleAnywhere, Category = "UI")
UWidgetComponent* HealthBarComponent;
UPROPERTY(EditDefaultsOnly, Category = "UI")
TSubclassOf<UUserWidget> HealthBarClass;
  • UI 위치 적절하게 배치
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));
    }
  • BeginPlay()에 적용
  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를 추가해 업데이트 해주기
    정상적으로 뜨는 것 확인.

에셋 적용

  • 좀비 에셋 3개를 일단 찾았으나 적절한 애니매이션은 찾지 못함.
    일단 개체수는 늘렸음. -> 다른 모션들을 구현 후 적용하기 (오늘 ~내일)

0개의 댓글