언리얼/라이라 프레임워크로 오버워치 만들기

[UE5 라이라(Lyra) 샘플로 오버워치 만들기] 10. 크레딧 화면에 액션 버튼 추가하기(1)

안선생 2025. 6. 23. 13:55

언리얼 Lyra 프로젝트에 크레딧 화면 액션 버튼 추가하기

이번 시간에는 크레딧 위젯에 액션 버튼을 추가해서 유저가 크레딧을 느리게 재생하거나 빠르게 스킵할 수 있도록 기능을 구현해보겠습니다.
기능 자체는 단순하지만, Lyra의 CommonUI 시스템을 활용한 인풋 바인딩 방식을 경험할 수 있는 좋은 예제입니다.

 

1. 새로운 크레딧 화면 클래스 만들기

 

먼저 ULyraActivatableWidget을 상속받는 C++ 클래스 UJHCreditScreen을 하나 생성해줍니다.
위치는 UI 폴더로 두는 것이 좋습니다.

 

2. 헤더에 멤버 변수 및 함수 정의

🧩 헤더 변수 선언:

protected:

	UPROPERTY(EditDefaultsOnly)
	FDataTableRowHandle BackInputActionData;

	UPROPERTY(EditDefaultsOnly)
	FDataTableRowHandle SlowInputActionData;

	UPROPERTY(EditDefaultsOnly)
	FDataTableRowHandle FastInputActionData;

	FUIActionBindingHandle BackHandle;
	FUIActionBindingHandle SlowHandle;
	FUIActionBindingHandle FastHandle;

기능 요약:

  • 백 버튼 누르면 위젯 닫기
  • 슬로우/패스트 버튼 누르면 크레딧 속도 제어

🧩 함수 선언:

 

public:

	virtual void NativeOnInitialized() override;

	void HandleBackAction();
	UFUNCTION(BlueprintImplementableEvent)
	void HandleSlowAction();
	UFUNCTION(BlueprintImplementableEvent)
	void HandleFastAction();

 

BlueprintImplementableEvent는 블루프린트에서 구현할 수 있는 함수로, 크레딧 속도 변경을 블루프린트에서 자유롭게 처리할 수 있게 합니다.

 

3️⃣ 바인딩 등록 – NativeOnInitialized 구현

void UJHCreditScreen::NativeOnInitialized()
{
	Super::NativeOnInitialized();

	BackHandle = RegisterUIActionBinding(FBindUIActionArgs(BackInputActionData,true,FSimpleDelegate::CreateUObject(this,&ThisClass::HandleBackAction)));
	SlowHandle = RegisterUIActionBinding(FBindUIActionArgs(SlowInputActionData,true,FSimpleDelegate::CreateUObject(this,&ThisClass::HandleSlowAction)));
	FastHandle = RegisterUIActionBinding(FBindUIActionArgs(FastInputActionData,true,FSimpleDelegate::CreateUObject(this,&ThisClass::HandleFastAction)));
}

🔸 두 번째 인자인 true는 액션 바(ActionBar)에 버튼을 노출시키는 설정입니다.
즉, UI 하단에 표시되는 버튼을 자동으로 생성해줍니다.

 

 

 

 

4️⃣ 백 액션 기능 구현

void UJHCreditScreen::HandleBackAction()
{
	DeactivateWidget();
}

백 버튼을 눌렀을 때 현재 크레딧 화면을 닫도록 구성했습니다.
슬로우/패스트 기능은 블루프린트에서 구현할 예정입니다.

 

 

📁 전체 코드 요약

헤더 파일 (JHCreditScreen.h)

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

#pragma once

#include "CoreMinimal.h"
#include "UI/LyraActivatableWidget.h"
#include "JHCreditScreen.generated.h"

/**
 * 
 */
UCLASS()
class LYRAGAME_API UJHCreditScreen : public ULyraActivatableWidget
{
	GENERATED_BODY()

public:

	virtual void NativeOnInitialized() override;

	void HandleBackAction();
	UFUNCTION(BlueprintImplementableEvent)
	void HandleSlowAction();
	UFUNCTION(BlueprintImplementableEvent)
	void HandleFastAction();
	

protected:

	UPROPERTY(EditDefaultsOnly)
	FDataTableRowHandle BackInputActionData;

	UPROPERTY(EditDefaultsOnly)
	FDataTableRowHandle SlowInputActionData;

	UPROPERTY(EditDefaultsOnly)
	FDataTableRowHandle FastInputActionData;

	FUIActionBindingHandle BackHandle;
	FUIActionBindingHandle SlowHandle;
	FUIActionBindingHandle FastHandle;
};

C++ 파일 (JHCreditScreen.cpp)

 

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


#include "UI/JHCreditScreen.h"

#include "Input/CommonUIInputTypes.h"

void UJHCreditScreen::NativeOnInitialized()
{
	Super::NativeOnInitialized();

	BackHandle = RegisterUIActionBinding(FBindUIActionArgs(BackInputActionData,true,FSimpleDelegate::CreateUObject(this,&ThisClass::HandleBackAction)));
	SlowHandle = RegisterUIActionBinding(FBindUIActionArgs(SlowInputActionData,true,FSimpleDelegate::CreateUObject(this,&ThisClass::HandleSlowAction)));
	FastHandle = RegisterUIActionBinding(FBindUIActionArgs(FastInputActionData,true,FSimpleDelegate::CreateUObject(this,&ThisClass::HandleFastAction)));
 
}

void UJHCreditScreen::HandleBackAction()
{
	DeactivateWidget();
}

마무리

이번 시간에는 Lyra의 ULyraActivatableWidget을 기반으로 UI 인풋 액션 바인딩을 구현하는 기본 구조를 익혔습니다.
다음 시간에는 에디터에서 UI 디자인 작업 및 블루프린트로 슬로우/패스트 기능 구현을 이어서 해보겠습니다.