위젯 애니메이션은 시작과 끝에 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을 추가해야 합니다.
'Unreal Engine > C++' 카테고리의 다른 글
[Unreal Engine C++] EnhancedInputSystem의 입력 값 구하기 (1) | 2024.03.15 |
---|---|
[Unreal Engine C++] C++에서 인터페이스 변수 사용하기 (0) | 2024.01.12 |
[Unreal Engine 4 C++] TimeStop (시공단열/초산 회피) (0) | 2023.08.02 |
[Unreal Engine 4 C++] UObject에서 Tick함수 사용하는 법 (0) | 2023.07.10 |
[Unreal Engine 4 C++] C++에서 참조 인자를 가진 함수를 블루프린트에서 호출할 때 출력이 아닌 입력으로 참조 인자 사용하기 (0) | 2023.01.10 |