코드카타 문제 / Unreal TeamProject
→ 헤더에서 각 무기 타입에 맞는 텍스처 등록:
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "WeaponHUD")
UTexture2D* PistolIcon;
UTexture2D* RifleIcon;
UTexture2D* ShotgunIcon;
UTexture2D* NoneIcon;
→ WeaponImage는 위젯 상에서 바인딩된 UImage* 포인터.
→ UpdateWeaponIcon(EWeaponType WeaponType) 함수로 아이콘을 동적으로 교체함.
if (AMainPlayerController* PC =
Cast<AMainPlayerController>(GetController()))
{
if (PC->WeaponHUDWidgetInstance)
{
PC->WeaponHUDWidgetInstance->
UpdateWeaponIcon(CurrentWeapon->GetWeaponType());
}
}
→ 무기 교체 로직은 보통 플레이어 캐릭터
→ PlayerController
→ HUD 위젯 구조로 전달.
→ GetWeaponType()는 EWeaponType enum 반환.
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) 조합으로 처리.
→ 작업 흐름:
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 에디터에 만든 이름 그대로 호출 가능
UI 구현은 단순히 화면에 그리는 게 아니라,
정확한 클래스 구조와 데이터 전달 흐름이 중요.
위젯에서 텍스처를 강제로 세팅하려면,
UImage를 반드시 SizeBox로 감싸 고정 사이즈 유지.
애니메이션도 조건에 따라 명확히 트리거되도록
구성해야 유저가 인지하기 쉬운 피드백 제공 가능.
UI 갱신 타이밍 추천: Tick()에서 매 프레임 확인하지 말고,
총알 발사 직후 / 무기 교체 시 / 리로드 시에만
호출되도록 설계하는 게 성능상 더 유리함.