NPC와 NPC의 대사에 관한 설계가 끝났으니, NPC와 Player의 상호작용을 추가해주었다.
https://bobyul.tistory.com/103
NPC 및 NPC 대사 설계
NPC의 대화 시스템을 만들기 전, 우선 NPC에 관한 정보와 NPC가 하는 대사들을 저장하는 구조체를 생성해야하고, 구조체를 생성하기 전에도 어떤 식으로 데이터를 관리할 것인지를 미리 구상해둬
bobyul.tistory.com
NPC와 상호작용 - BP
이제 위에서 완성한 대사 UI가 NPC를 클릭했을 때 보여지도록 해야한다.
NPC를 좌클릭했을 때 대사 UI가 출력이 되도록 BP로 작성해보았다.
좌클릭을 했을 때 발생할 Event는 NPC BP에서 아래와 같이 생성해주었다.


NPC를 클릭하면 Player의 Input을 비활성화하면서 NPC 대화 Widget을 생성하고, 해당 Widget에 NPC 및 NPC Quest 진행 상태 정보를 전달해주면서 Input Mode를 UI Mode로 바꿔주었다.
NPC를 클릭했을 때 대화 UI가 뜨면서 Player가 NPC가 있는 지점으로 이동하는 현상이 있었기에, Disable Input 노드를 추가해줘서 해당 현상을 막아주었다.
Add top Viewport 노드에서는 ZOrder값에 '100' 을 줬는데, 게임 화면에 이미 생성되어있는 Widget들이 있어서 NPC 대화 Widget을 최상단에 두어 다른 Widget들의 상호작용을 막아주기 위함이다.
마지막 노드인 Set Input Mode에서는 'Flush Input' 에 체크를 해서 모든 입력 이벤트를 막아주었다.
NPCDialogueWidget 코드에서 Widget이 사라질 때 Player의 Input을 재활성화 시켜주는 코드를 이미 넣어뒀기에, 따로 노드를 생성해줄 필요는 없다.
게임을 실행하고 확인해보면 아래와 같이 NPC를 클릭하면 NPC 대화 UI가 출력되는 것을 확인할 수 있다.

NPC와 상호작용 - C++
이번에는 위에서 BP로 간단하게 추가했던 NPC와의 상호작용을 코드로 만들어주었다.
우선 Player에서 사용할 것이기에, NPC와 상호작용이 가능한 전용 Actor Component를 하나 생성해준다.
'Unreal Engine > Functional Implementation' 카테고리의 다른 글
| 언리얼 엔진 GAS Aura 시스템 구현 - Gameplay Tag로 직업과 직업 차수에 맞는 Aura 출력하기 (0) | 2025.08.21 |
|---|---|
| 언리얼 엔진 네트워크 동기화 정리 - Multicast와 Replication 차이, 언제 어떻게 써야 할까 (1) | 2025.08.07 |
| 언리얼 엔진 Rich Text Block Gradient 글꼴 적용 - Font Material과 Widget 애니메이션 정리 (0) | 2025.08.01 |
| 언리얼 엔진 NPC 대화 시스템 설계 - DataTable, DataAsset, Subsystem으로 구조 잡기 (1) | 2025.07.16 |
| GAS를 사용하여 Scan 기능 구현 (0) | 2025.07.10 |