Unreal - 버튼 위젯 사용하기

2025. 5. 16. 06:52·Unreal5 프로젝트 다이어리

사용자가 크리스탈에 오버랩되자마자 이동하는것이 어색하다고 판단하여

오버랩되면 이동할것인지 말것인지 마지막으로 확인하는 ui를 만들어보도록 하겠습니다

 

캔버스패널을 ui에 추가후

버튼을 추가합니다

 

버튼의 스타일 -> 노말 , 호버, 눌림 이있습니다

노말은 일반적으로 보여지는 상태

호버는 마우스를 버튼위에 가져다 댔을때

눌림은 마우스가 버튼을 클릭했을때 입니다

각각 알맞은 이미지를 할당해주겠습니다

 

변수로 만들어주겠습니다

 

버튼과 실행될 함수를 선언

public:
	virtual void NativeConstruct() override;

	UPROPERTY(meta = (BindWidget))
	UButton* Button_Yes;

	UPROPERTY(meta = (BindWidget))
	UButton* Button_No;

	UFUNCTION()
	void YesButtonClick();

	UFUNCTION()
	void NoButtonClick();

 

iterator를 사용하기위한 EnginUtils.h와 버튼, 크리고 참조할 액터(텔레포트크리스탈)의 헤더를 추가해줍니다

#include "Components/Button.h"
#include "TeleporterCristal.h"
#include "EngineUtils.h"

 

Native에서 각가 버튼을 OnClicked와 바인딩

NoButtonClick함수에서는 RemoveFromParent로 자기UI를 삭제시키며

YesButtonClick에서는 Iterator로 해당 오버랩된 크리스탈을 찾아 LevelMove함수를 실행시킵니다

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

    if (Button_No)
    {
        Button_No->OnClicked.AddDynamic(this, &UUserSelectorUI::NoButtonClick);
    }
    if (Button_Yes)
    {
        Button_Yes->OnClicked.AddDynamic(this, &UUserSelectorUI::YesButtonClick);
    }
}

void UUserSelectorUI::YesButtonClick()
{
    for (TActorIterator<ATeleporterCristal>it(GetWorld()); it; ++it)
    {
        ATeleporterCristal* teleportCristal = *it;
        if (teleportCristal)
        {
            teleportCristal->LevelMove();
            break;
        }
    }
}

void UUserSelectorUI::NoButtonClick()
{
    RemoveFromParent();
}

 

 

크리스탈에서의 LevelMove함수입니다

페이드아웃을 시키며 델리게이트로 레벨을 오픈시키는 OpenLevel함수를 실행시킵니다

void ATeleporterCristal::LevelMove()
{
	//fade out
	APlayerController* pC = UGameplayStatics::GetPlayerController(this, 0);
	fadeWidgetInstance = CreateWidget<UFadeInOutWidget>(pC, fadeWidget);
	if (fadeWidgetInstance)
	{
		fadeWidgetInstance->AddToViewport();
		FWidgetAnimationDynamicEvent endEvent;
		endEvent.BindDynamic(this, &ATeleporterCristal::OpenLevel);
		fadeWidgetInstance->BindToAnimationFinished(fadeWidgetInstance->FadeOut, endEvent);
	}
	fadeWidgetInstance->PlayFadeOut();
}

 

마우스를 가져다대면 호버 이미지가 나옵니다

 

No를 누르면 UI객체는 삭제됩니다

 

Yes를 누르면 맵의 전환이 일어납니다

 

전체결과물

 

---2025-05-17--

버튼의 가시성을 높이기 위해 버튼을 마우스를 가져다대면 버튼이 커지도록 애니메이션이 나오도록 해보겠습니다

트랜스폼을 변경해주는 애니메이션을 제작합니다

 

hover상황떄 사용할 함수 애니메이션 선언해줍니다

UFUNCTION()
void YesButtonHover();

UFUNCTION()
void NoButtonHover();

UPROPERTY(meta = (BindWidgetAnim), Transient)
UWidgetAnimation* ButtonYesHoverAnim;

UPROPERTY(meta = (BindWidgetAnim), Transient)
UWidgetAnimation* ButtonNoHoverAnim;

 

해당함수에서 애니메이션을 실행

void UUserSelectorUI::YesButtonHover()
{
    PlayAnimation(ButtonYesHoverAnim);
}

void UUserSelectorUI::NoButtonHover()
{
    PlayAnimation(ButtonNoHoverAnim);
}

 

NativeConstruct에서 해당 버튼과 OnHovered로 바인드해줍니다

//hovered
if (Button_No)
{
    Button_No->OnHovered.AddDynamic(this, &UUserSelectorUI::NoButtonHover);
}
if (Button_Yes)
{
    Button_Yes->OnHovered.AddDynamic(this, &UUserSelectorUI::YesButtonHover);
}

 

Unhovered도 작성해주겠습니다

//unhovered
if (Button_No)
{
    Button_No->OnUnhovered.AddDynamic(this, &UUserSelectorUI::NoButtonUnHover);
}
if (Button_Yes)
{
    Button_Yes->OnUnhovered.AddDynamic(this, &UUserSelectorUI::YesButtonUnHover);
}

 

최종결과물

 

'Unreal5 프로젝트 다이어리' 카테고리의 다른 글

Unreal - 레벨이동시 게임저장, 로드하기 (Save Game)  (1) 2025.05.20
Unreal - 몬스터 웨이브 만들기  (0) 2025.05.17
Unreal - 로딩 창  (0) 2025.05.16
Unreal - 페이드 인 / 아웃  (0) 2025.05.15
Unreal - GameMode로 맵마다 설정을 변경하기  (0) 2025.05.15
'Unreal5 프로젝트 다이어리' 카테고리의 다른 글
  • Unreal - 레벨이동시 게임저장, 로드하기 (Save Game)
  • Unreal - 몬스터 웨이브 만들기
  • Unreal - 로딩 창
  • Unreal - 페이드 인 / 아웃
lucodev
lucodev
커피와 노트북 그리고 개발
  • lucodev
    루코 개발테이블
    lucodev
  • 전체
    오늘
    어제
    • 분류 전체보기 (121) N
      • Unreal5 프로젝트 다이어리 (73)
      • Unreal5 프로젝트 다이어리2 (3) N
      • Unreal 팁 (8)
      • Unreal 디버깅 (8)
      • C++ 프로그래머스 다이어리 (21) N
        • Stack (3)
        • Hash (4)
        • Heap (2)
        • Sort (1) N
      • 코드 개인보관함 (8) N
  • 인기 글

  • 최근 글

  • 최근 댓글

  • 링크

  • 공지사항

  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 태그

    언리얼 시퀀스
    unreal look at
    unreal loading
    언리얼 behaviortree
    unreal sequence
    언리얼 foot step
    언리얼 look at
    unreal 모션매칭
    언리얼 컷씬
    언리얼 비헤이비어트리
    언리얼
    unreal 컷씬
    언리얼 로딩
    언리얼 behavior tree
    언리얼 페이드 아웃
    언리얼 motionmatching
    unreal 시퀀스
    언리얼 모션매칭
    unreal 로딩
    언리얼 로딩창
  • hELLO· Designed By정상우.v4.10.3
lucodev
Unreal - 버튼 위젯 사용하기
상단으로

티스토리툴바