언리얼 팀프로젝트 2주차_무기 UI 시스템 구현 및 애니메이션 적용(2025.08.06)

이정국(PBD)·2025년 8월 6일

TIL

목록 보기
42/69

*오늘 학습 내용*

코드카타 문제 / Unreal TeamProject

1. ✅ WeaponHUD 위젯 연동 및 구조

  • UWeaponHUDWidget는 UUserWidget를 상속한 C++ 위젯 클래스.
→ 헤더에서 각 무기 타입에 맞는 텍스처 등록:

UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "WeaponHUD")
UTexture2D* PistolIcon;
UTexture2D* RifleIcon;
UTexture2D* ShotgunIcon;
UTexture2D* NoneIcon;

→ WeaponImage는 위젯 상에서 바인딩된 UImage* 포인터.UpdateWeaponIcon(EWeaponType WeaponType) 함수로 아이콘을 동적으로 교체함.

2. ✅ 무기 교체 시 UI 연동 방식

if (AMainPlayerController* PC =
Cast<AMainPlayerController>(GetController()))
{
	if (PC->WeaponHUDWidgetInstance)
	{
		PC->WeaponHUDWidgetInstance->
        UpdateWeaponIcon(CurrentWeapon->GetWeaponType());
	}
}

→ 무기 교체 로직은 보통 플레이어 캐릭터 
→ PlayerController 
→ HUD 위젯 구조로 전달.GetWeaponType()는 EWeaponType enum 반환.

3. ✅ 탄약 수 UI 처리 및 색상 조건 분기

float AmmoRatio = MaxAmmo > 0 ? 
(float)CurrentAmmo / (float)MaxAmmo : 1.0f;

CurrentAmmoText->SetText(FText::AsNumber(CurrentAmmo));
MaxAmmoText->SetText(FText::AsNumber(MaxAmmo));

FLinearColor Color = AmmoRatio <= 0.3f ? 
FLinearColor::Red : FLinearColor::White;

CurrentAmmoText->SetColorAndOpacity(FSlateColor(Color));

→ AmmoRatio가 0.3 이하일 경우 글자 색상 빨간색 적용.

→ 조건 분기는 FSlateColor(FLinearColor) 조합으로 처리.

4. ✅ 텍스트 애니메이션 (스케일 점멸 효과)

→ 작업 흐름:
1. UMG 위젯 에디터에서 PunchAmmoScale 애니메이션 생성

2.CurrentAmmoText에 애니메이션 적용:

3. RenderTransform → Scale → 트랙 추가

4. Scale 값을 예: (1.3, 1.3)(1.0, 1.0)으로 설정

→ 애니메이션 실행:
if (PunchAmmoScale)
{
	PlayAnimation(PunchAmmoScale, 0.f, 1);
}

애니메이션은 C++에서 UMG 에디터에 만든 이름 그대로 호출 가능

5. ✅ 느낀 점

  • UI 구현은 단순히 화면에 그리는 게 아니라,
    정확한 클래스 구조와 데이터 전달 흐름이 중요.

  • 위젯에서 텍스처를 강제로 세팅하려면,
    UImage를 반드시 SizeBox로 감싸 고정 사이즈 유지.

  • 애니메이션도 조건에 따라 명확히 트리거되도록
    구성해야 유저가 인지하기 쉬운 피드백 제공 가능.

  • UI 갱신 타이밍 추천: Tick()에서 매 프레임 확인하지 말고,
    총알 발사 직후 / 무기 교체 시 / 리로드 시에만
    호출되도록 설계하는 게 성능상 더 유리함.

profile
창백한 푸른점 속 작은점

0개의 댓글