퀘스트 추가
이제 퀘스트를 작성해보자.
Quest/Item 항목을 선택한다.
+버튼을 눌러 Quest를 선택해 생성해주자.
Name에 퀘스트 이름을 입력하고, Description에 본인이 알 수 있도록 퀘스트에 대한 메모를 하자.
Success Description에 퀘스트 성공 시 띄울 말을 작성하자.
State는 퀘스트의 진행상태이다. 퀘스트를 진행하기 전이므로 unassigned로 설정하자.
Trackable은 퀘스트 활성 시 이용자가 알 수 있게 하는 옵션이다.
Has Entries는 퀘스트의 진행상황을 표시한다. (카운트 해야하는 퀘스트나 성공여부 등)
Has Entries를 체크하게 되면 아래에 Add New Quest Entry가 생성되며 이것을 클릭해 빈 공간에 variables항목에서 생성한 변수값을 작성할 수 있다.
잠깐 Variables로 이동해 Boolean변수를 하나 만들어줬다.
다시 퀘스트로 이동해 Entry안에 대괄호 [] 를 작성하고, 안에 var=생성한 변수 이름 을 작성해줬다.
이렇게 하면 퀘스트 진행상황이 표시된다.
이제 퀘스트의 진행상황을 대화에도 적용시키자.
네 라고 대답하는 부분에서 퀘스트를 활성화 시킬것이다. 네 라고 대답하는 부분의 노드를 클릭하자.
Conditions는 어떠한 조건을 만들때 작성하고, Script는 값 설정 알림 실행하게 해준다.
쉽게 얘기하면, Conditions는 조건문이고, Script는 함수라고 생각하면 된다.
스크립트 오른쪽에 점 버튼 (.. 으로 되어있는 버튼)을 클릭하면 다이얼로그에 설정되어있는 여러 값들을 추가 할 수 있다.
퀘스트를 선택하고, 방금 만든 퀘스트를 등록한 뒤 unassigned로 되어있는 부분을 active로 바꿔, 퀘스트를 수락한것으로 만들어주자.
그리고 +를 눌러서 변수도 추가해주자. 아까 만들어둔 변수를 추가하고, 만들어둔 변수를 선택한 뒤, 값을 False로 초기화해주자.
다 했다면 Apply버튼을 눌러 만들어주자.
이런식으로 자동으로 스크립트를 작성해준다.
이제, 퀘스트가 활성화되면 아래에 있는 대화가 진행되면 안되기 때문에 조건을 걸어보자.
여기서 "안녕 처음보는 용사네! ~" 로 되어있는 첫번째 대화를 클릭한다.
컨디션도 마찬가지로 (..으로 된)버튼을 클릭한다.
퀘스트를 선택하고, 퀘스트목록에서 만들어 둔 퀘스트를 선택한다. 세번째 칸의 Is는 어떤 조건을 선택하는것인가 인데, Is로 둔다. 마지막으로 퀘스트가 비활성화 된 상태로만 대화를 시작하게 할 것이기 때문에 Unssigned를 선택한다.
마찬가지로 Apply버튼을 클릭해 마무리해주자.
이런식으로 스크립팅 되었다.
그리고, Sequence는 카메라, 소리 등 여러 설정을 할 수 있지만, 스크립트에서 작성하는것이 더 편하다고 한다. 추후에 설명할 듯 하다.
다시 퀘스트가 활성되어지는 대화인 "네" 노드를 클릭하고 설정을 살펴보자.
스크립트에 다시 점 버튼을 클릭해 Alert를 선택하고, 비어있는 칸에 퀘스트가 시작되었다는 문구를 작성하자.
마찬가지로 Apply를 눌러 적용시키자.
퀘스트가 활성화 되었을 때
이제 퀘스트가 활성화 되었을 때, 진행되는 대화를 만들어보자.
이런식으로 새로운 노드를 만들어주자. 그리고 새로 만든 노드를 클릭해
이런식으로 Conditions에서 퀘스트가 활성화 되었을 때를 감지하기 위해 조건을 작성하고 Apply를 누르자.
그리고 대답을 위해 하위에 노드 두개를 만들어, 하나는 퀘스트를 성공했을 때, 하나는 퀘스트를 성공하지 못했을 때를 각각 만들어주자.
성공으로 가는 대화는 스크립트 작업이 필요하다.
네 라는 노드를 클릭해 스크립트를 작업하자.
이런식으로 작성한 후 Apply를 눌러 적용시켜주자.
그리고 각 대화 아래로 NPC의 추가 대화 내용을 작성해주자.
이런식으로 대화를 구성했다!
왼쪽 묶음과 오른쪽 묶음이 있는데, 왼쪽 묶음 전체를 드래그 해서, 그룹으로 잡고, 오른쪽 클릭해서 Arrange Node -> Vertical을 눌러 정렬을 할 수 있는데, 본인이 보기 편하게 정렬해두면 된다.
게임 안에서 상호작용(몬스터 등) 오브젝트를 만들기
이제 퀘스트를 완료하기 위해서 완료 할 수 있는 오브젝트를 만들어보자.
일단, 아무거나 만들었다. 이전글에서 말한대로, Collider와 Usable, Dialogue System Trigger 컴포넌트를 모두 추가해준다.
콜라이더는 통과가 가능하게 Is Trigger를 체크한다.
Dialogue System Trigger컴포넌트의 Add Action을 눌러주면 여러 조건을 추가할 수 있게된다.
퀘스트 상태를 변경하려면 Set Quest State를 선택하면 된다.
다만, 여기서 퀘스트를 완료 시킬것이 아니기 때문에 Run Lua code를 선택해 변수값을 설정해주고, 점 버튼을 눌러 아까 스크립트를 작성하듯 설정해주자.
여기서 변수를 선택해 True로 변경해주면 된다.
그리고 다시 Add Action을 눌러서 Show Alert를 생성해, 퀘스트를 완료했다는 알림을 띄워주자.
이제 확인했다는 대화에 조건을 추가할것이다.
여기서 네 노드를 클릭하고, Condition을 추가해주자.
퀘스트를 완료하면 대화가 활성되도록 condition을 추가해주자.
마찬가지로 점 버튼을 눌러 변수가 True가 되었을때로 선택하고 Apply를 눌러주면 된다.
확인해보기
이제 게임을 실행해 확인해보자.
퀘스트를 확인하기 위해 말을 걸면 네 물론이죠!라는 항목이 뜬다. 이를 클릭하면
이렇게 퀘스트가 시작되었습니다! 라는 문구와 함께 우측 상단에 테스트 퀘스트라는 현재 진행중인 퀘스트 목록이 뜨게 된다.
퀘스트를 완료하지 않고 대화를 하면, 네라는 대답은 보이지 않는다.
아까 만들어 둔 퀘스트 오브젝트에 가서 상호작용을 하게 되면
퀘스트가 완료되었다고 알림창이 뜨게 되고,
다시 대화를 걸게 되면 네라는 대화가 활성화된걸 알 수 있다!
위 글은 아래의 영상을 참고로 작성되었다.
'Develop > Dialog System' 카테고리의 다른 글
[Dialog System] 유저와 NPC간의 대화를 간편하게 만들어보자! - 3. 대화와 퀘스트 저장/불러오기 (0) | 2024.10.31 |
---|---|
[Dialog System] 유저와 NPC간의 대화를 간편하게 만들어보자! - 2.오브젝트와의 상호작용 (0) | 2024.10.31 |
[Dialog System] 유저와 NPC간의 대화를 간편하게 만들어보자! - 0. 설치와 간단한 대화 만들기 (0) | 2024.10.30 |