MainMenu 만들기 2 (Confirmation Dialogue)

김여울·2025년 10월 27일
1

내일배움캠프

목록 보기
104/111
post-thumbnail

WBP_ConfirmationDialogue

  • Vertical Box → Wrap with Common Border
  • Commont Text
  • Horizontal Box
    • WBP Menu Button (Common UI Plugin * 2)
    • Spacer


Common Text

  1. CommonTextStyle_MainMenu 적용
  2. Justification 가운데
  3. Vertical Alignment 가운데

Horizontal Box

  1. Horizontal & Vertical Alignment 가운데

WBP Menu Button

  1. Button Text 추가 ( y / n )
  2. Size: Auto

확인 메세지가 화면 중앙에 오게 하기

  1. Vertical Box를 Wrap with Common Border
  2. Vertical Box의 Horizontal & Vertical Alignment 가운데

메뉴 배경과 맞게 Common Border 변경

  1. 스타일 새로 만들기

  2. 배경에 맞는 색상 선택 후 A값 0.8로 설정
  3. 버튼 사이에 Spacer(Size: Fill) 추가
  4. Horizontal Box Padding(Top : 20) 설정


Confirmation Dialogue를 뷰포트에 띄우기

  1. Function: ShowDialogue
  2. Inputs: Message(Text)
  3. 노드 연결
    CT_Message SetTExt(Widget)


Quit 버튼에 Confirmation Dialogue 연결하기

WBP_MainMenu

  1. 파란색으로 점 만들어 놔야지 Outputs 보인다
  2. 함수 이름 변경 후 Details에서 Pure ☑
  3. Message 변수로 승격 후 QuitMessage 추가하기
  4. 이제 Quit 버튼 누르면 WBP_ConfirmationDialogue 나옴!
  5. Spacer 위치 옮기기 & Common Border Wrap with Background Blur
  6. Blur Strength로 조절하기



Yes/No 버튼 연결하기

  1. Event Dispatchers(Input Dispatch)와 Inputs(Yes/No(bool)) 추가하기
  2. Yes/No 버튼 클릭 시 Call Input Dispatch
  3. WBP_MainMenu에서 Event 바인드하고 함수 연결하기
  4. Quit 버튼 눌렀을 때 게임 종료하기
  • 사용자가 Quit 버튼 클릭 → “정말 종료하시겠습니까?” 팝업이 뜸
  • 팝업에서 “Yes” 선택 시 → OnQuitConfirmation(true) 실행
  • Branch가 True로 들어가면 → Quit Game 실행,
    이때 Get Owning Player 로 얻은 플레이어 컨트롤러가 Specific Player 핀으로 연결되어 있음
  • 게임이 즉시 종료됨 (에디터에서는 PIE 세션이 중지됨)

Yes 눌러도 실행 종료 안 됨

  1. 변수를 승격해서 새 변수 WBP_ConfirmationDialogue 생성
  2. WBP_ConfirmationDialogue - Convert to Validated Get
  3. .
  4. .


GetDialogue(Pure)

  • 위젯 안에서 Confirmation Dialogue를 한 번만 생성하고 재사용하려는 구조
  • 이미 만들어진 확인창 위젯이 있으면 그걸 반환하고, 없으면 새로 만들어서 저장한 뒤 반환
  • Lazy Initialization (지연 초기화) : 필요할 때만 생성하고, 이후에는 계속 같은 인스턴스를 씀

노드별 설명

노드역할설명
GetDialogue (입력 핀)함수 시작점외부에서 이 함수를 호출했을 때 진입하는 지점
GET (WBP Confirmation Dialogue 변수)이미 만들어둔 대화상자 위젯이 있는지 확인변수에 값이 들어있으면 “Is Valid”가 True가 됨
Branch (Is Valid)유효성 분기True: 이미 위젯이 있음 → 그대로 반환
False: 아직 없음 → 새로 생성
Get Owning Player현재 위젯의 소유 플레이어 컨트롤러 가져오기새로 만들 위젯의 Owning Player 지정에 필요
Create WBP Confirmation Dialogue Widget새로운 대화상자 위젯 생성지정한 클래스(WBP Confirmation Dialogue)로 새 인스턴스 생성
SET (WBP Confirmation Dialogue)방금 만든 위젯을 변수에 저장다음번 호출 때는 이걸 재사용 가능
Return Node최종 반환결과적으로 “현재 유효한 확인 대화상자 위젯”을 리턴

동작 순서 요약

  1. GetDialogue() 호출됨
  2. WBP Confirmation Dialogue 변수가 Valid한지 검사
    • ✅ Valid → 그대로 Return
    • ❌ Invalid → 새로 생성
  3. 새로 생성 시:
    • Get Owning Player 로 컨트롤러 가져옴
    • Create Widget 실행 후 변수에 저장 (Set)
      • Set에 저장하는 이유 : 나중에 또 쓰기 위해서, 재사용(caching)
      • 처음 한 번만 Create Widget으로 만들고 그걸 멤버 변수에 저장
      • 안 하면 Create Widget을 호출할 때마다 새 인스턴스를 만듦
  4. 최종적으로 유효한 Dialogue 위젯 반환

“필요할 때만 위젯을 생성하고, 이후에는 캐시된 것을 반환한다.”
Pure라서 실행 핀이 없고, 단순히 위젯 참조를 반환하는 Getter 성격


Button Animation (BackgroundBlur)

1. Render Opacity 0 → 1.0

2. Play Animation에 만든 애니메이션 연결하기

- Event Pre Construct

UMG 위젯에서만 존재하는 특별한 이벤트
Event Construct(일반적으로 BeginPlay 같은 역할)와 다른 역할
위젯이 화면에 실제로 생성(Construct)되기 직전에 호출되는 이벤트

→ 이 위젯이 화면에 생성되기 직전에 페이드인 애니메이션을 재생해라
Pre Construct = 위젯 “나오기 직전 준비 단계”
Construct = 위젯 “화면에 실제로 나온 뒤 동작 시작”

- OnInitialized / PreConstruct / Construct

위젯 생성 시점
│
├── ① OnInitialized          ← 가장 먼저 (생성 직후, 한 번만)
│
├── ② PreConstruct           ← Construct 전에, 디자인 타임에도 호출
│
└── ③ Construct              ← 실제 런타임 중, 화면에 표시될 때 호출

// 실행 순서 예시
UUserWidget::OnInitialized();     // 내부 세팅, delegate 연결
UUserWidget::PreConstruct();      // 디자인 미리보기 or 표시 전 초기화
UUserWidget::Construct();         // 실제 표시됨 (BeginPlay 같은 역할)

Button Animation (Yes/No)


Play Mode는 Reverse로 하기 (Fade Out)

1개의 댓글

comment-user-thumbnail
4일 전

잘보고갑니다 ^^

답글 달기