스토리 전달을 위해 캐릭터가 나와 대사 읊으며 연기하는 모습을 연출하기 위한 기능이 컷신
여기에 유저가 직접 개입해서 무언가를 할 수 있는 걸 인터랙티브 컷신이라 한다
이번 글에선 특정 트리거 볼륨 내 진입 시, 1회 한정으로 컷신이 실행되고
컷신이 종료되면 다시 플레이를 이어갈 수 있게 구현해본다
첫 번째, 위젯 블루프린트 생성 후 UI 구성
1. 컨텐츠 브라우저에 마우스 우클릭 시 호출되는 컨텍스트 메뉴에서 [ 유저 인터페이스 > 위젯 블루프린트 ] 선택

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

- 필자는 컷신 인지 및 영화관 감성을 주기 위해 위, 아래가 어두운 UI 배경 머티리얼을 제작했다

- ScalarParameter
- TextureCoordinate
- ComponentMask (G만 선택된 상태가 되도록 수정)
- Constant3Vector
두 번째, 트리거 볼륨 액터 BP 생성 및 배치
1. TriggerBox 타입으로 블루프린트 생성

- 다른 타입도 상관 없는데 가장 무난한 건 박스니까~
※ 간단한 예시를 위해 트리거 볼륨을 사용한 것으로 액터 타입으로 해도 무관하다
2. 트리거 볼륨에 진입했을 때 실행할 기능에 대한 그래프를 작성한다

- 1회성이기에 IsComplete이 false일 경우에만 실행되도록 하고 실행 직후 true 설정
- 그 다음 인터랙션 모드 실행
> SetInteractionMode 관련 사항은 「 인터랙션 모드의 5. 인터랙션 모드 」 내용 참고
- 그 다음 데이터 에셋에 값을 저장해준다
> 본 BP에서 나가기 입력이 먹히지 않을 수 있어 PlayerContoller에서 입력 받는 구조로 구현한다
> PlayerController에서 입력 받은 뒤 동일하게 SetInteractionMode 함수 사용
> 이때 SetInteractionMode에서 요구하는 데이터를 전달하는 역할이 데이터 에셋
> 데이터 에셋 관련 사항은 「 데이터 에셋 」 내용 참고
- 마지막으로 PlayerController 블루프린트에 인터랙션 종료 그래프를 작성해준다

- 캐릭터가 노출되는 형태라면 위치 보정을 위한 기능이 필요하다
> 인터랙션 모드 관련 함수 라이브러리에 SetCharacterPosition 함수 추가 후 아래와 같이 작성
>> 만약 Sprint나 Crouch, Aim 등 여러 상태가 있다면 이를 해제하는 예외 처리도 필요

> 본 함수를 트리거 볼륨 액터 BP에 연결해주면 된다
>> 함수가 요구하는 Location에는 트리거 볼륨 위치에 캐릭터가 위치하길 원하는 지점의 위치값 대입
>> 함수가 요구하는 Rotation에는 0, 0, 0 대입

> 모드 종료 후 해제했던 Character Movement를 복구해준다

3. 배치해준다

- 생성한 트리거 볼륨 BP를 맵에 원하는 위치에 배치한다
마지막, 테스트 진행

볼륨이 배치된 곳으로 진입하면 인터랙티브 컷신 모드가 실행된다
이 상태에서 나가기 키 조작하면 모드 종료