피가 35퍼 이하로 내려가면 화면이 붉게 물드는 데미지 오버레이를 만들어보겠습니다
위젯을 만들어줍니다
사용할 데미지 오버레이 img를 구해준뒤 캔버스패널에 넣어줍니다
해당 이미지의 Opacity값이 0에서 1로 변하는 애니메이션을 만들어준뒤 애니메이션이 재생되는 함수를
토글방식으로 만들어줍니다
UCLASS()
class BLASTERDREAM_API UBloodWidget : public UUserWidget
{
GENERATED_BODY()
public:
UPROPERTY(meta = (BindWidgetAnim), Transient)
UWidgetAnimation* BloodAnim;
UFUNCTION()
void PlayBloodAnimation();
};
PlayAnimation옵션에 뒤에 0을 붙히면 무한히 루프합니다
만약 함수가 다시 호출된다면 애니메이션을 멈춥니다
void UBloodWidget::PlayBloodAnimation()
{
if (IsAnimationPlaying(BloodAnim))
{
StopAnimation(BloodAnim);
}
else
{
PlayAnimation(BloodAnim, 0.f, 0);
}
}
플레이어 BeginPlay에서 위젯을 미리 띄워두고 숨겨둡니다
//blood overay
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "UI")
TSubclassOf<UBloodWidget> bloodWidgetClass;
class UBloodWidget* bloodWidget;
bool bWasLowHp = false;
//blood overlay
if (bloodWidgetClass)
{
bloodWidget = CreateWidget<UBloodWidget>(GetWorld(), bloodWidgetClass);
if (bloodWidget)
{
bloodWidget->AddToViewport();
bloodWidget->SetVisibility(ESlateVisibility::Hidden);
}
}
tick에서 hp가 35프로 이하일때 숨겨둔 위젯을 visible 애니메이션을 실행
hp가 0이되거나 35프로 보다 많아질때 애니메이션을 멈춥니다
//overlay
if (bloodWidget && playerMaxHp > 0.f)
{
float hpPercent = playerCurrentHp / playerMaxHp;
if (playerCurrentHp <= 0.f)
{
// hp 0
if (bloodWidget->GetVisibility() != ESlateVisibility::Hidden)
{
bloodWidget->SetVisibility(ESlateVisibility::Hidden);
}
bWasLowHp = false;
}
else if (hpPercent <= 0.35f)
{
if (!bWasLowHp)
{
bWasLowHp = true;
if (bloodWidget->GetVisibility() != ESlateVisibility::Visible)
{
bloodWidget->SetVisibility(ESlateVisibility::Visible);
}
bloodWidget->PlayBloodAnimation(); // toggle On
}
}
else
{
if (bloodWidget->GetVisibility() != ESlateVisibility::Hidden)
{
bloodWidget->SetVisibility(ESlateVisibility::Hidden);
}
if (bWasLowHp)
{
bWasLowHp = false;
bloodWidget->PlayBloodAnimation(); // toggle Off
}
}
}
결과물
'Unreal5 프로젝트 다이어리' 카테고리의 다른 글
Unreal - 드래곤 캐릭터 만들기(2) (0) | 2025.06.14 |
---|---|
Unreal - 드래곤 캐릭터 만들기 (1) (0) | 2025.06.12 |
Unreal - 딜레이 프로그래스바 (0) | 2025.06.07 |
Unreal - 일시정지 위젯 만들기 (0) | 2025.06.07 |
Unreal - 위젯 나이아가라 (0) | 2025.06.06 |