프랍에 인터랙션 했을 때, 인터랙션 모드에 진입하고

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를 조준한 상태로 인터랙션 키 조작하면 인터랙션 모드 실행

- 나가기 키 조작 시, 인터랙션 모드 종료

 

+ Recent posts