UI 애니메이션
애니메이션 추가
+ Animation 버튼을 선택하면 애니메이션 클립이 추가된다. 이후 해당 애니메이션 클립을 선택하면 UI 중 어떤 컴포넌트에 애니메이션을 적용할지 선택할 수 있다.
애니메이션 함수 생성
C++를 통해 애니메이션 재생을 위해 그래프에서 애니메이션 재생 기능이 포함된 함수를 구현한다.
C++로 애니메이션 호출
UFunction* PlayAnimFunc = MainMenuWidgetInstance->FindFunction(TEXT("PlayGameOverAnim"));
if (PlayAnimFunc)
{
MainMenuWidgetInstance->ProcessEvent(PlayAnimFunc, nullptr);
}
블루프린트에서 구현한 함수의 이름을 통해 해당 기능을 불러올 수 있다. 굉장히 유용하게 사용할 것 같다.
ProcessEvent의 2번째 인자인 nullptr은 애니메이션 함수의 매개변수로 아무것도 넘기지 않겠다는 의미라고 한다.
월드 상 UI 배치
배치할 UI 생성
캐릭터의 현재 체력 / 최대 체력을 UI로 출력하기 위해 사진과 같은 UI를 생성했다.
Character.h, .cpp
//.h
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "UI")
UWidgetComponent* OverHeadWidget;
//.cpp
OverHeadWidget = CreateDefaultSubobject<UWidgetComponent>(TEXT("OverHeadWidget"));
OverHeadWidget->SetupAttachment(GetMesh());
OverHeadWidget->SetWidgetSpace(EWidgetSpace::Screen);
void ASpartaCharacter::UpdateOverheadHP()
{
UUserWidget* OverHeadWidgetInstance = OverHeadWidget->GetUserWidgetObject();
UTextBlock* HPText = Cast<UTextBlock>(OverHeadWidgetInstance->GetWidgetFromName("OverHeadHP"));
HPText->SetText(FText::FromString(FString::Printf(TEXT("%.0f / %.0f"), Health, MaxHealth)));
}
생성자에서 UI를 메시에 부착하고 Widget 상태를 World가 아닌 Screen으로 설정해주었다.
캐릭터의 HP에 따라 UI를 초기화하는 코드는 함수로서 구현하여 필요할 때마다 호출할 수 있도록 했다.
느낀 점
아무런 배경지식 없이 언리얼을 혼자 배우면서 UI를 구현하다가 헤맸던 경험이 있었는데, UI 구현방법에 대해 배우고 나니까 그땐 무슨 생각으로 무작정 부딪히기만 했을까 싶네요 ㅎㅎ..
열정이 너무 앞선 탓에 그때 한 달 정도 언리얼을 붙잡으면서 시간을 보냈던 것 같은데, 역시 모르는 게 있다면 서적이나 강의를 통해 학습하는 방법이 제일 효율적인 것 같네요 ! 항상 책을 가까이 해야겠습니다
'언리얼 엔진 > 스파르타코딩클럽' 카테고리의 다른 글
[언리얼엔진] 4-4. 파티클과 사운드 구현 (0) | 2025.02.11 |
---|---|
[언리얼엔진] 4-2. 메인 메뉴 구현 (0) | 2025.02.10 |
[언리얼엔진] 4-1. UI 위젯 설계와 실시간 데이터 연동 (0) | 2025.02.10 |
[언리얼엔진] 3-5. 게임 루프 설계 (0) | 2025.02.07 |
[언리얼엔진] 3-4. 캐릭터 체력 및 점수 시스템 구현 (0) | 2025.02.06 |