언리얼 - 게임 개발

첫 게임 개발 (23) _ 간단한 대화 구현

earth-star 2024. 8. 10. 11:34

플레이어 캐릭터에 상호작용 키를 만들고 특정 물체와 상호작용시 간단한 대화가 나타나도록 구현해볼 것이다.

 

먼저 E키에 상호작용을 위한 키를 할당하였다.

 

플레이어 BP에 InteracTrace 함수를 추가하여 위와 같이 구성하였다.

 

Sphere Trace 함수를 이용하여 캐릭터의 앞에 물체를 감지하는 Trace를 구현하는 함수이다.

 

상호작용할때 Dialogue_C 클래스가 있을 시 Dialogue_C의 Speaking이벤트를 발생하도록 하였다.

 

E키를 누르면 위와 같이 캐릭터의 앞에 Trace가 나타나는 것을 볼 수 있다.

 

 

BPI를 만들어 CheckSpeaking과 Speaking함수를 추가하였다.

 

Dialogue_C 액터 컴포넌트이다.

 

필요한 물체에 넣어야하기 때문에 액터 컴포넌트 블루프린트가 적당하다.

 

Speaking 커스텀이벤트를 만들고 CheckSpeaking으로 대화중이 아닐시 입력받은 Dialogue를 순차적으로 나타나도록 구성한 노드이다.

 

자세히 보면 크게 어렵지 않다.

 

대화를 위한 위젯을 만들고 위와 같이 SpeechBubble(대화 상자)와 Speech(텍스트)를 변수로 사용을 체크한다.

 

위젯의 그래프이다.

 

조금 복잡한데 앞에서부터 천천히 보면 먼저 SpeechBubble을 Set Visibility를 이용하여 보이도록 한다.

 

이후 Dialogue_C에서 받은 Dialogue를 배열이 끝날때까지 각 단어를 Append로 이어 붙어 텍스트로 만들어 Speech(텍스트)에 나타나도록 한다.

 

예를들어 "안녕하세요"를 배열로 받았다면 매 Delay마다 "안", "안녕", "안녕하", "안녕하세", "안녕하세요" 순서로 나타나게 된다.

 

이렇게 순차적으로 나타나므로 자연스럽게 텍스트가 앞에서부터 출력되어 나오는 것으로 나타난다.

 

이후 끝나면 1.5초의 딜레이 후 SpeechBubble(대화 상자)를 Hidden으로 바꾸어 사라지게 한다.

 

플레이어 BP에 위와 같이 대화 위젯과 E키 상호작용과 Event Speaking 커스텀 이벤트를 추가하였다.

 

 

테스트를 위하여 큐브를 하나 만들고 위와 같이 Dialogue_C를 추가한다.

 

Dialogue 배열에는 "안녕"과 "앞으로 가기 위해선 준비가 되어있어야 할거야." 2가지를 추가하였다.

 

 

 

큐브 앞에서 E키를 누르면 입력한 대화가 나타나는 것을 볼 수 있다.