Unreal Engine/C++

[Unreal Engine C++] Widget Animation Delegate

한돌이 2024. 1. 9. 16:18

 

 위젯 애니메이션은 시작과 끝에 Delegate를 사용하여 특정 함수를 실행할 수 있습니다. 예를 들어 위와 같이 대미지를 표시하는 폰트는 대미지를 출력한 후 위젯 애니메이션으로 FadeOut 되면서 완전히 사라질 때 위젯 애니메이션의 끝에 선언한 Delegate를 실행하여 폰트를 제거합니다.

 이처럼 위젯 애니메이션의 시작과 끝에 Delegate를 사용하여 활용한 코드는 다음과 같습니다.

 

// SampleWidget.h
// Fill out your copyright notice in the Description page of Project Settings.

#pragma once

#include "CoreMinimal.h"
#include "Blueprint/UserWidget.h"
#include "PRDamageAmountWidget.generated.h"

UCLASS()
class PROJECTSAMPLE_API SampleWidget : public UUserWidget
{
	GENERATED_BODY()

protected:
	virtual void NativeConstruct() override;
    
private:
	/** WidgetAnim이 시작할 때 실행하는 함수입니다. */
	UFUNCTION()
	void OnWidgetAnimStarted();

	/** WidgetAnim이 끝났을 때 실행하는 함수입니다. */
	UFUNCTION()
	void OnWidgetAnimFinished();

private:
	/** Sample WidgetAnimation입니다. */
	UPROPERTY(BlueprintReadWrite, Transient, Category = "WidgetAnimation", meta = (AllowPrivateAccess = "true", BindWidgetAnim))
	UWidgetAnimation* SampleWidgetAnim;

public:
	/** WidgetAnim이 시작할 때 실행하는 Delegate입니다. */
	FWidgetAnimationDynamicEvent WidgetAnimStartedDelegate;

	/** WidgetAnim이 끝났을 때 실행하는 Delegate입니다. */
	FWidgetAnimationDynamicEvent WidgetAnimFinishedDelegate;
};
// SampleWidget.cpp
// Fill out your copyright notice in the Description page of Project Settings.


#include "Widgets/SampleWidget.h"

void USampleWidget::NativeConstruct()
{
	Super::NativeConstruct();

	if(SampleWidgetAnim)
	{
		// 위젯 애니메이션이 시작할 때 실행할 Delegate에 함수를 바인딩
		WidgetAnimStartDelegate.BindDynamic(this, &USampleWidget::OnWidgetAnimStarted);
		BindToAnimationStarted(SmpleWidgetAnim, WidgetAnimStartesDelegate);
	
		// 위젯 애니메이션이 끝났을 때 실행할 Delegate에 함수를 바인딩
		WidgetAnimFinishedDelegate.BindDynamic(this, &USampleWidget::OnWidgetAnimFinished);
		BindToAnimationFinished(SampleWidgetAnim, WidgetAnimFinishedDelegate);
	    
		// 위젯 애니메이션 재생
		PlayAnimationForward(SampleWidgetAnim);
	}
}

void USampleWidget::OnWidgetAnimStarted()
{
	// 위젯 애니메이션이 시작할 때 실행할 코드
}

void USampleWidget::OnWidgetAnimFinished()
{
	// 위젯 애니메이션이 끝났을 때 실행할 코드
}

 

 UMG의 위젯 애니메이션을 Bind해서 C++에서 변수로 사용하려면 UPROPERTY에 Trasient와 meta에 BindWidgetAnim을 추가해야 합니다.