보통 인 게임에서 ESC 키를 누르면 각종 기능을 이용할 수 있는 게임 메뉴가 열린다
이번 글에선 이를 구현해본다
첫 번째, 게임 메뉴 UI 만들기
1. 컨텐츠 브라우저에 마우스 우클릭 시 호출되는 컨텍스트 메뉴에서 [ 유저 인터페이스 > 위젯 블루프린트 ] 선택

2. 필요한 항목들로 UI 구성

두 번째, UI 호출 / 닫기 기능 구현하기
1. UI 호출 키로 사용할 InputAction 추가 및 InputMappingContext를 설정한다
- 본 글에선 인터랙션 모드 종료 키 이벤트를 활용하므로 본 과정 패스
2. UI 모드 구분용 Enum 생성

- 기존 인터랙션 모드나 인터랙티브 컷신 모드와 구분 및 관리하기 위한 것
- Enum으로 관리하는 게 과하다 싶다면 String 기반으로 할 수도 있음
3. 캐릭터 컨트롤러 BP에 변수 생성

- 아까 생성한 Enum 타입으로 변수 생성
- 만약 String 기반이라면 String 타입으로 변수 생성
4. 게임 메뉴 UI 상태를 파악하기 위한 변수 생성

5. 마지막으로 열었던 UI를 파악하기 위한 변수 생성

6. 캐릭터 컨트롤러 BP에 게임 메뉴 UI 열기 / 닫기 기능 구현

- 위 그래프는 기존 인터랙션 모드 종료 기능에 본 기능을 반영해 수정한 형태
- 본 구조를 이해하기 위해선 「 인터랙션 모드의 5. 인터랙션 모드 」 내용을 숙지한 상태여야 한다
- 게임 메뉴 UI가 호출됐을 때, 게임이 일시 정지된다면 모든 키가 먹히지 않게 된다
- 이때 예외로 키 입력이 되도록 하려면 InputAction의 [ 일시정지 시 트리거 ] 항목을 체크 설정한다

7. SetInteractionMode 함수 개선

- UI 모드 구분용으로 생성했던 Enum 타입으로 변수 생성

- EnterMode == true 그래프에서 Set Visibility와 Set View Target with Blend 사이에 UIType에 따른 if문 추가
- EnterMode == false 그래프에서 마우스 커서 표시와 Set View Target with Blend 사이에 UIType에 따른 if문 추가

- EnterMode == true 그래프의 끝에 UIType 설정 그래프 추가
8. SetCharacterPosition 함수 개선

- 위와 같이 수정해주면 된다
※ 여기까지 구현하면 모드 종료 키 조작 시, 조건에 따라 아래와 같이 기능을 실행하게 된다
- 현재 UIType이 CommonUI라면 게임 메뉴 UI가 열렸는지 확인
> 게임 메뉴 UI가 열리지 않은 상태라면 게임 메뉴 UI를 연다
> 게임 메뉴 UI가 열린 상태라면 게임 메뉴 UI를 닫는다
- 현재 UIType이 ModeUI라면 UI 정보를 받고 인터랙션 모드 or 인터랙티브 컷신 모드를 종료한다
세 번째, 기능 구현하기
1. 데이터 연동을 위한 PlayerControllerBP 캐싱

2. 버튼 이벤트 추가

- 버튼을 선택한 상태에서 우측 디테일의 최하단에 이벤트들이 있다
- 원하는 조작법에 따라 이벤트를 추가한다
2. 버튼별 기능 구현
이벤트 그래프에 추가된 각 버튼의 이벤트에 버튼별 기능을 구현한다
- 계속하기 버튼

- 로비로 돌아가기 버튼

> SetData는 다이얼로그에 표시될 텍스트들을 설정하는 것으로 UI_Dialogue BP 내에 직접 만든 함수
> UI 정보 표시 방식은 저마다 다르므로 그래프 작성법은 생략하겠다
- 설정 버튼

마지막, 테스트 진행

모드 종료 키 누르면 게임 메뉴 UI 호출
계속하기 버튼 누르면 게임 메뉴 UI 닫힘
설정 버튼 누르면 게임 메뉴 UI 닫히고 환경 설정 UI 호출
