프로그래밍/언리얼

언리얼 위젯 애니메이션 C++

추향 2024. 12. 18. 17:38

언리얼 위젯 애니메이션

언리얼 블루프린트에서 Widget Animation을 만들고 Cpp에서 사용하는 방법에 대한 글입니다.

위젯 애니메이션 만들기 Blueprint.

저는 보통 블루프린트에서 위젯과 애니메이션을 먼저 만듭니다.

순서는 이렇게 되겠네요.

1. 위젯 만들기 : 애니메이션을 적용할 위젯을 만듭니다.

2. 애니메이션 만들기 : 애니메이션 작업을 시작하기 위해 빈 애니메이션을 만듭니다.

3. 위젯 요소 선택하기 : 애니메이션을 적용할 위젯 요소(텍스트, 버튼 등등)를 선택합니다.

4. 열쇠모양을 누르기 : 이걸 눌러놓으면 Properties가 변경될 때 자동으로 Key를 추가합니다.

5. 프레임에 Key 추가 : 타임라인에 Key를 추가하여 애니메이션 동작을 설정합니다.

아래 사진은 예시로 보여드리는 사진입니다.

초기상태.

  • Scale : 3배
  • Render Opacity : 0

최종상태.

  • Scale : 1배.
  • Render Opacity : 1

위젯이 크고 안 보이는 상태로 있다가 점점 작아지고 보이게 됩니다.

위젯 애니메이션 변수 연결 / 재생 C++

위젯 애니메이션 변수 연결

블루프린트로 만들었던 애니메이션을 C++에서 사용하기 위해 변수를 연결해주겠습니다.

블루프린트로 만들었던 애니메이션과 이름을 똑같이 해서 UWidgetAnimation을 만들어줍니다.

UPROPERTY(Transient,meta = (BindWidgetAnim))
class UWidgetAnimation* MenuAnim;

간단하게 설명하면 이겁니다.

Transient : 이건 휘발성 데이터, 임시로 사용할거니까 저장 ㄴㄴ.

meta = (BindWidgetAnim) : 블루프린트에서 만든 애니메이션 중 이름이 같은 걸 자동으로 연결해 줘!

애니메이션 재생.

PlayAnimation으로 UWidgetAnimation을 불러주면 됩니다.

(아래 예시는 Menu를 부르면 위젯 애니메이션이 작동하고, Menu를 사용하는 동안 게임 내 시간이 흐르지 않습니다.)

void UMenuWidget::NativeConstruct()
{
	Super::NativeConstruct();
	//#include "Animation/WidgetAnimation.h"
	PlayAnimation(MenuAnim);
	if (GetOwningPlayer()) {
	FInputModeUIOnly InputMode;
	GetOwningPlayer()->SetInputMode(InputMode);
	GetOwningPlayer()->SetShowMouseCursor(true);
	}
	//#include "Kismet\GameplayStatics.h"
	UGameplayStatics::SetGlobalTimeDilation(GetWorld(), 0.f);
}

위젯 애니메이션 실행.

위에서 보여드린 예제를 실행한 영상입니다.