
안녕하세요.
오늘은 게임 내에 NPC와 dialogue를 구현하는 방법에 대해 알아보겠습니다.
우선 NPC 캐릭터는 하단의 사이트에서 가져왔습니다.
해당 사이트에서 무료 pixel Art와 관련된 asset을 많이 구하실 수 있습니다.
사용한 캐릭터를 상업적으로 이용하시려면 해당 라이센스를 확인하셔야 합니다.
NPC도 기본적으로 주인공 캐릭터와 마찬가지로 여러 노드가 사용됩니다. 저는 캐릭터의 기본 동작과 플레이어한테 공격 당했을 경우의 모션을 추가하기 위해 AnimationPlayer 노드를 추가하였습니다. 또한 공격 판정을 위한 hurtBox노드와 플레이어와의 거리를 측정하기 위한 player_detect 노드를 추가하였습니다.
NPC의 행동에 관한 애니메이션을 추가하였습니다. 기본 상태는 idle로 서있는 모션을 나타냅니다. 만약 공격 당할 경우 death모션으로 변경되게 됩니다.
플레이어와의 공격과 거리 감지를 위해 두 Area2D 노드의 시그널을 연결해줍니다.
다음과 같이 연결되게 되면 이제 메인 코드와 시그널로 연결된 함수를 작성해야합니다.
코드는 이런 식으로 _process(delta)의 경우 해당 씬이 게임이 진행되는 동안 계속 실행되는 함수를 말합니다.
_process(delta)와 비슷한 함수로는 _ready(delta)도 존재하는데 ready의 경우 씬이 준비되고 한번만 실행되는 것이 차이점입니다.
따라서 위의 코드는 is_death는 bool타입으로 공격을 받지 않은 경우 계속 idle 모션을 출력합니다. 그러다가 플레이어가 이전에 설정한 player_detect노드의 범위 내에 접근할 경우 블로그에 다루진 않았지만 게임에서 퀘스트를 알려주는 느낌표가 출력되도록 설정하였습니다.
그후 interact로 설정한 e버튼을 누를 경우 이후에 다룰 Dialogic을 통해 timeline이 실행되어 npc와 대화가 가능합니다.
시그널을 연결하여 플레이어가 범위 내에 있는지와 공격을 하였는지 여부를 탐지합니다.
NPC를 추가하려는 씬에 Wizard 씬을 import시켜줍니다.
마지막으로 씬 내에서 NPC의 위치를 조정해주면 NPC 생성의 과정이 끝납니다.
Dialogic은 게임에서 dialogue를 보다 쉽게 표현하기 위한 플러그인입니다. 플러그인이란 Godot 엔진에서 기본 기능을 넘어 개발자가 필요로 하는 특별한 기능이나 도구를 추가할 때 사용됩니다. 이를 통해 UI 요소, 게임 내 도구 등을 추가할 수 있게하는 라이브러리 비슷한 개념입니다.
Dialogic은 해당 링크를 통해 다운 받을 수 있습니다.
다운 받은 후 고도 프로젝트 폴더 안 addons 폴더에 추가하면 됩니다.
Dialogic을 추가 후 프로젝트를 실행시켜보면 위 사진처럼 Dialogic 섹션이 추가되는 것을 확인 가능합니다.

그 후 우측 상단에 표시한 버튼을 눌러 새로운 timeline을 생성하여 줍니다. timeline은 NPC와의 dialogue를 관리하는 일종의 대본이라고 생각하시면 됩니다.

타임라인의 우측에 보면 여러 기능들이 있는데 오늘은 text와 choice를 사용해보겠습니다.
먼저 text입니다. text로 표시된 부분을 클릭한 후 텍스트를 작성해줍니다. text는 기본적인 대화형식으로 단순히 설정한 문구를 표시해주는 역할을 합니다. 저는 아래 보이는 것 처럼 text를 작성하였습니다.
그 후 게임을 실행하여 확인해본 결과 잘 동작하는 것을 확인할 수 있습니다. 
다음으론 choice인데 단순히 설정된 문구만 표시하는 것이 아닌 대화의 선택지를 부여하는 기능을 합니다. text하단에 추가하여 질문과 대답을 작성하면 됩니다.

이를 실행시켜 보면 마찬가지로 잘 동작하는 것을 확인할 수 있습니다.

마지막으론 아까 NPC 생성 시에 설정한 플레이어의 공격을 받을 경우 idle에서 death로 애니메이션을 변경하는 기능입니다.
이상으로 NPC와의 대화, 상호작용에 대해 알아보았습니다.
긴 글 읽어주셔서 감사합니다.