프랍에 인터랙션 했을 때, 인터랙션 모드에 진입하고
ESC 키 조작 시, 인터랙션 모드를 종료하는 기능을 구현한다
인터랙션 모드란?
프랍을 강조하는 카메라 구도와 연관 UI들이 표시되어
프랍과 관련된 정보를 제공하거나 프랍 기능을 이용할 수 있는 모드
구현 방법
첫 번째, 인터랙션 모드 UI
1. 인터랙션 모드 진입 시 표시될 UI를 구성하기 위해 위젯 블루프린트 생성
2. 예시는 아이템 정보 전달용으로 위젯 블루프린트 구성은 아래와 같다

두 번째, 인터랙션 대상 BP
1. 액터 타입으로 인터랙션 대상 BP 생성
2. 대상 BP의 DefaultSceneRoot에 아래 항목들 추가
- 비주얼 담당 메쉬 (스태틱 / 스켈레탈 무관)
- Collision
- 카메라 컴포넌트
- 위젯 컴포넌트

- 대상 BP를 맵에 배치 후 선택한 상태가 되면 카메라가 비추는 모습을 볼 수 있다
- 이 상태에서 배치하면 작업하기 편할 것

3. Overlap 이벤트
- On Component Begin Overlap (Collision)은 캐릭터가 Collision에 들어갔을 때
- On Component End Overlap (Collision)은 캐릭터가 Collision에서 나갔을 때
- 위 두 이벤트를 활용해 아래와 같이 그래프 작성

> 차량 승하차 구현에서 구현한 것은 카메라나 장착 중인 장비 등이 Collision에 들어가 의도치 않은 작동을 하게 되는 문제가 있다
> 해서 Tag 확인을 통해 캐릭터만 체크되도록 했다
> 이를 위해 [ 캐릭터 BP > 액터 > 태그 ]에 항목 추가 후 태그를 입력해야 한다
- Show Interaction Key By Overap은 편의 / 가시성을 위해 직접 만든 함수로 구성은 아래와 같다

> 차량 승하차 구현에서 구현한 것과 다른 점은 Get Player Controller를 함수 내 추가한 것
5. 인터랙션
※ 인터랙션 기능 실행 과정을 정리하면 아래와 같다
- 실행 > 캐릭터 조작 제한 > Main HUD 및 Interaction Key UI 숨김 > 화면 전환 > 마우스 커서 표시 > 인터랙션 모드 UI 생성 > 생성 UI 뷰포트에 추가
- 종료 > 인터랙션 모드 UI 제거 > 마우스 커서 숨김 > 화면 전환 > Main HUD 및 Interaction Key UI 표시 > 캐릭터 조작 제한 해제
구현 과정
- 0. 선행 작업으로 모드 종료를 위한 Input Action 및 Input Mapping Context 설정 필요
- 1. 인터랙션 키 연관 IA Event의 Started에서 시작해 아래와 같이 그래프 작성

> Flip Flop은 빠른 구현을 위해 사용
> 다른 키로 인터랙션 모드를 종료하고 싶다면 Flip Flop의 B에 연결된 부분을 해당 키 이벤트의 Started에 연결하면 된다
> SetInteractionMode는 편의 / 가시성을 위해 직접 만든 함수로 구성은 아래와 같다

> 구조가 복잡해 SetInteractionMode 내에서도 기능별 함수를 만들었다
> 아래 그래프는 각각 SetControl / SetVisibility / SetModeUI



마지막, 테스트 진행
- 대상 BP 근처에 가면 인터랙션 키 표시

- 대상 BP를 조준한 상태로 인터랙션 키 조작하면 인터랙션 모드 실행
- 나가기 키 조작 시, 인터랙션 모드 종료

