큰맘먹고 유니티 에셋스토어에서 Dialogsystem을 구매하였다.
물론 DialogSystem은 유니티에도 강좌가 많고, 강좌를 따라 스크립트로 작성하여 만들 수 있다고 하지만, 이 에셋에서 주는 힘이 크다고 생각하여 구매했다.
유니티에셋 DialogSystem을 구매하는 링크는 아래에 있다.
Dialogue System for Unity | 행동 AI | Unity Asset Store
Get the Dialogue System for Unity package from Pixel Crushers and speed up your game development process. Find this & other 행동 AI options on the Unity Asset Store.
assetstore.unity.com
진짜 엄청 비싸다.. 그래도 오래 쓸거같으니 일단 구매해보자..
임포트 하기
임포트는 유니티 에디터에서 Window -> packagemanager 를 누르면 아래와 같은 창이 뜬다.
이 창에서 좌측 상단의 +버튼 옆의 packages를 My Assets를 누르면 로딩 후 내가 가진 에셋이 전부 뜨게 된다.
여기서 아까 구매한 에셋을 다운로드 하고, 임포트 시켜주면 준비는 끝난다.
기본구성
임포트를 완료하면 위와 같은 창이 뜬다.
이 창이 바로 뜨지 않는다면, 에디터 상단의 Tools -> Pixel Crushers -> DialogSystem -> Welcom Window를 클릭해 열어주면 된다.
만약 2D게임을 만드는 중이라면 아래에 2D Physics를 활성화 시키자!
이 창에서 Dialogue Editor버튼을 누르자.
여기서 Database 항목을 선택하고 Create New버튼을 눌러 다이얼로그를 하나 생성하자.
생성된건 알아서 폴더에 잘 정리하자.
생성을 하면 이런 UI가 뜨는데, 여기서는 다이얼로그를 작성하는데 필요한 자료들을 설정할 수 있다.
이 부분은 내용이 많으니 사용방법은 아래의 링크에서 참고해보자.
Dialogue System for Unity: Dialogue Editor
This chapter describes how to use the Dialogue Editor to write conversations and quests. To import and export other formats, see Import & Export. Dialogue Database A dialogue database is an asset file. To create a dialogue database: Click the Dialogue Mana
www.pixelcrushers.com
Actor탭으로 넘어가면, 누구와 대화하는것인지 추가할 수 있는 UI가 생성된다. 오른쪽의 +버튼을 눌러 대화상대를 추가하자.
이런식으로 추가하였는데, Discription은 내가 알아볼 수 있도록 메모하는 공간이라고 생각하면 된다.
Quest/Item탭은 퀘스트를 추가하고, 내용을 작성하는곳이다.
Location항목은 어떻게 사용하는지 아직은 잘 모르겠다.
Variables항목은 변수를 추가하여 여러 상황에 맞게 조건을 추가할 수 있다. 많이 사용하는건 Boolean과 Number이다.
Conversations항목은 Actors에서 작성한 상대와의 대화내용을 작성할 수 있는 공간이다. 애니메이터 편집과 비슷하게 작동할 수 있다.
대화 추가
Actors탭에서 작성한 인물을 클릭하면 인스팩터창에 인물에 대한 정보를 편집할 수 있는 공간이 만들어진다.
여기서 인스팩터창을 살펴보면,
Use Display Name을 체크하면, 대화 시, DisplayName을 띄울 수 있다. 체크 한 후, Display Name에 플레이어라고 적어보자.
그리고, 아래의 Portrait Textures에 이미지를 등록하면, 말하고 있는 인물의 이미지를 추가할 수 있다.
설정이 끝났다면, Conversations항목을 눌러보자.
우측 상단에 + 버튼을 누르면 처음 노드인 START노드가 생성된다.
비어있는 공간을 클릭하면 인스팩터창에 대화에 대한 정보가 표시되며, 여기서 Title에 어떤 대화인지 제목을 지정할 수 있다.
그리고 Actor와 Conversation은 누구와 대화하고 있는지 표시할 수 있는 공간이다.
Actor : 말하는 사람
Conversation : 듣는사람
Title을 수정한 후, 알아볼 수 있게 Discription에 메모를 해보자.
스타트를 선택하고, 마우스 우클릭을 해 Create Child Node를 눌러 새로운 노드를 생성하자.
이때, 상대방이 이야기 하는거라면 기본적으로 회색이다.
여기서 대화를 입력해보자.
만들어둔 노드를 클릭하면 이런 인스팩터 창이 생기는데, 대화를 작성하려면, Dialog Text에 작성하거나, 생성한 노드를 더블클릭 해서 작성하면 된다.
작성 한 후, 노드를 오른쪽 클릭해 또 노드를 추가하게 되면 파란색으로 표시되는데, 이건 플레이어가 답변하는 부분이다.
상대방이 계속 이야기하게 하려면, 인스팩터 창에서 동그라미 쳐둔 버튼을 눌러 바꿔주면 된다.
바꾸면 회색으로 변하게 된다.
어쨌든, 플레이어의 대답을 추가해보자.
이런식으로 여러개의 노드를 추가할 수도 있다.
그리고 노드를 눌러 Make Link를 이용해 대화 간 연결도 지정해줄 수 있다.
원하는대로 대화를 구성해보자.
만들어둔 대화를 활성화시키기
대화를 활성화 시켜주기 위해서, 일단 기본적으로 제공되는 UI를 가져와보자.
경로는 프로젝트창에서 Plugins -> Pixel Crushers -> Dialogue System -> Prefabs에있는 Dialogue Manager프리팹을 하이어라키 창에 추가하자.
넣어둔 DialogManager를 클릭하면 인스팩터창에 여러 설정이 보이게 되는데
Initial Database에 아까 만들어둔 Dialog를 넣어주자
그리고 아래의 Display Settings는 화면에 보여지는 설정을 할 수 있다.
여기서 중요한건 Dialogue UI인데, 등록되어있는 프리펩을 클릭해보면 프로젝트창에 여러 기본 UI들이 나타난다.
경로는 Dialog System 폴더 안의 prefabs -> standard UI Prefabs이다.
이중에서 마음에 드는 UI를 선택해 추가하거나, 커스텀 하면 된다.
창이 나오는데
여기서 Use Prefab을 선택하면 된다.
난 WRPG폴더의 WRPG Template Standard Dialogue를 사용했다.
그리고, 캔버스 설정은 만들어둔 캔버스가 있다면 등록해도 되지만, 기본적으로 Dialog Manager에 캔버스가 있기 때문에 그대로 둬도 된다.
그다음, SubTitleSetting을 보자.
여기서 봐야하는건 Continue Button과, Min Subtitle Seconds를 봐야한다.
Continue Button은 대화시 버튼이나 클릭으로 대화 건너뛰기를 추가할것인가 이고,
Min Subtitle Seconds는 하나의 대화가 나왔을 때, 몇초정도 표시하고 있을것인가를 설정하는 곳이다.
그리고 아래의 Alert Settings는 경고, 또는 알림메세지를 표시하는 곳이다.
퀘스트를 받는 경우, 알림을 띄울 목적으로 설정하는곳이다.
여기서, Allow Alerts During Conversation을 클릭하면, 대화중에 퀘스트를 받는 경우, 알림창을 띄울 수 있게 된다.
Min Alert Seconds는 몇초정도 화면에 표시할것인가이다.
그리고, DialogManager의 아래에 있는 Input Device Manager는 UI가 UI버튼에 자동 초점을 맞출 때 설정하는 부분인데 기본적으로 정해져있는대로 사용하면 된다.
변경하고 싶다면, input device에 변경하고싶은걸 선택하면 된다. 난 Keyboard로 설정했다.
플레이어 설정
난 기존에 만들던 게임이 있어서 이 프로젝트를 그대로 사용하기로 했다.
플레이어는 테그를 기본 Player테그로 지정해야한다.
기본적으로 플레이어는 콜라이더를 가지고 있어야한다.
Add Component를 클릭해 Proximity Selector를 추가하자. (상호작용을 위한 컴포넌트이다.)
추가중, 메세지창이 나타난다면 Add를 눌러 추가하자.
Default Use Message는 대화상대나 오브젝트 등, 어떤 키를 눌러야 상호작용 할 수 있는지 알려주는 메세지이다. 상호작용 메시지와 같다.
Use Key는 상호작용을 할 키를 선택하면 된다.
Use Button은 마우스 우클릭으로 되어있는데 필요없다면 제거하자.
마지막으로 플레이어에게 Dialogue System Events 컴포넌트를 추가해주자.
여기선 여러 이벤트를 추가할 수 있는데 일단 Conversation Events를 눌러 On Conversation start와 On Conversation End를 추가해주자.
이 부분은 대화도중, 키를 눌러 대화가 다시 시작되면 안되기 때문에 설정을 해줄것이다.
이벤트를 추가한 후, Player를 넣어주고, ProximitySelector에서 enabled를 선택해주자.
대화를 시작할땐 false로 두고, 대화가 끝났을 땐 true로 두자.
NPC설정
npc오브젝트에는 Usable과 Dialogue System Trigger, Collider 컴포넌트는 꼭 들어가야된다.
트리거에서 감지하게되면 어떻게 실행할것인지는 Trigger를 변경해주면 된다.
기본 On Use는 접근 시, 키나 상호작용 버튼을 눌러야 대화를 할 수 있게 된다.
여기서 대화를 해야하는 NPC면 Dialogue Actors를 추가해주자.
여기서 Actor부분에 누구인지 추가해주면 된다.
마지막으로 Dialogue System Trigger에서 Action을 추가해줘야한다.
Add Action을 클릭해 아까 만들어둔 대화를 넣어주자.
아래에 여러 체크박스가 있는데 주로 봐야하는 설정은 다음과 같다.
- Exclusive = 다른 대화가 활성화 되어있지 않은 경우 활성화
- Replace = 다른 대화가 활성화 되어있으면 중지
- Stop Conversation On Trigger Exit = 트리거 영역을 벗어나면 대화 중지
- Pause Game During Conversation = 대화 중 timeScale을 0으로 설정, 대화 끝나면 원상태로
게임을 플레이해 npc앞으로 가보니, 대화를 하려면 Space를 누르세요라는 문구가 떴다!
이런식으로 대화가 작동했다. 지금 내가 선택한 UI는 다음과 같이 작동한다.
NPC가 한 말이 계속 기록되는 UI이다. 이게 마음에 들어서 추후에 UI만 따로 커스텀할 생각이다.
위의 강좌는 다음 유튜브로 볼 수 있다.
'Develop > Dialog System' 카테고리의 다른 글
[Dialog System] 유저와 NPC간의 대화를 간편하게 만들어보자! - 3. 대화와 퀘스트 저장/불러오기 (0) | 2024.10.31 |
---|---|
[Dialog System] 유저와 NPC간의 대화를 간편하게 만들어보자! - 2.오브젝트와의 상호작용 (0) | 2024.10.31 |
[Dialog System] 유저와 NPC간의 대화를 간편하게 만들어보자! - 1.퀘스트를 생성해보자 (0) | 2024.10.31 |