Unreal - 데미지 오버레이 만들기

2025. 6. 8. 20:11·Unreal5 프로젝트 다이어리

피가 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
'Unreal5 프로젝트 다이어리' 카테고리의 다른 글
  • Unreal - 드래곤 캐릭터 만들기(2)
  • Unreal - 드래곤 캐릭터 만들기 (1)
  • Unreal - 딜레이 프로그래스바
  • Unreal - 일시정지 위젯 만들기
lucodev
lucodev
커피와 노트북 그리고 개발
  • lucodev
    루코 개발테이블
    lucodev
  • 전체
    오늘
    어제
    • 분류 전체보기 (157) N
      • Unreal5 프로젝트 다이어리 (73)
      • Unreal5 프로젝트 다이어리2 (10)
      • Unreal 팁 (8)
      • Unreal 디버깅 (8)
      • C++ 프로그래머스 다이어리 (46) N
        • Stack,Queue (5)
        • Hash (4)
        • Heap (2)
        • Sort (5)
        • Exhaustive search (5)
        • Greedy (2) N
        • BFS , DFS (6)
        • Graph (2)
        • Dynamic Programming (1)
        • C++ Math (2) N
        • 기타 문제 (11) N
      • 코드 개인보관함 (8)
      • 알고리즘 스타디 (1)
      • 알고리즘 스타디 과제 (3)
  • 인기 글

  • 최근 글

  • 최근 댓글

  • 링크

  • 공지사항

  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 태그

    언리얼 behavior tree
    언리얼 시퀀스
    unreal loading
    언리얼
    unreal 모션매칭
    언리얼 foot step
    언리얼 페이드 아웃
    unreal 시퀀스
    언리얼 motionmatching
    언리얼 behaviortree
    unreal 로딩
    언리얼 비헤이비어트리
    unreal look at
    unreal 컷씬
    언리얼 로딩창
    언리얼 로딩
    언리얼 컷씬
    언리얼 모션매칭
    언리얼 look at
    unreal sequence
  • hELLO· Designed By정상우.v4.10.3
lucodev
Unreal - 데미지 오버레이 만들기
상단으로

티스토리툴바