
퀘스트 만들기
Tutorial
Beginner
+10XP
10 mins
43
Unity Technologies

NPC는 대화 상대 외에도, 플레이어에게 퀘스트를 부여하고 플레이어가 퀘스트를 완료하면 보상으로 아이템을 지급할 수 있는 매우 유용한 수단으로도 활용할 수 있습니다.
이 튜토리얼에서 배울 내용은 다음과 같습니다.
- 새로운 NPC에 퀘스트를 추가합니다.
- 퀘스트가 진행 중일 때 NPC가 말할 대화 스크립트 항목을 생성합니다.
- 플레이어가 퀘스트에서 수집해야 할 인벤토리 아이템을 생성합니다.
- 퀘스트를 NPC 대화의 특정 분기에 연결합니다.
- 퀘스트 완료 시 플레이어에게 지급되는 보상을 생성합니다.
1. NPC에 퀘스트 추가
먼저 NPC에게 새로운 퀘스트를 추가해 보겠습니다.
1. 계층 구조에서 NPC 게임 오브젝트를 선택합니다.
2. 오른쪽 클릭하고 컨텍스트 메뉴에서 Create Empty를 선택합니다. 그러면 자식 게임 오브젝트가 생성됩니다.
3. 새로운 게임 오브젝트를 오른쪽 클릭하고 Rename을 선택합니다. 이 게임 오브젝트의 이름을 Quest로 변경합니다.
이 게임 오브젝트를 사용하면 보다 쉽게 퀘스트를 관리할 수 있습니다.
4. 인스펙터에서 Add Component를 클릭합니다.
5. Quest 스크립트 컴포넌트를 찾아 추가합니다

6. Title 필드에서 스크립트 이름을 'Apple Quest'로 지정합니다.
7. Desc 필드에 다음과 같이 퀘스트에 대한 짧은 설명을 추가합니다.
'Fetch an apple for the archer.'

2. 퀘스트에 대한 NPC 대화 스크립트 항목 생성
이제 퀘스트가 진행 중이거나 플레이어가 완료 조건을 충족했을 때 등 상황에 맞는 특정 NPC 대화를 퀘스트에 연결할 수 있습니다. 이렇게 하면 플레이어는 퀘스트 진행 중에 무엇을 해야 하는지 쉽게 기억할 수 있습니다.
퀘스트별 대화 스크립트 항목을 추가하는 방법은 다음과 같습니다.
1. 계층 구조에서 Quest 게임 오브젝트가 선택되어 있도록 합니다.
2. 인스펙터에서 Add Component 버튼을 클릭합니다. Conversation Script 컴포넌트를 찾아 Quest에 추가합니다.
3. 대화 스크립트에서 최초 대화 설정 시 사용한 프로세스를 따라 대화 스크립트 항목 하나를 추가합니다.
ID: 1.1.1
Text: Please, fetch me an apple.
4. Add Component 버튼을 다시 선택합니다. 검색 바에 Conversation Script를 입력하고 두 번째 Conversation Script 컴포넌트를 Quest에 추가합니다.
5. 두 번째 Conversation Script 컴포넌트에서 또 하나의 Conversation Script Item을 추가합니다.
ID: 1.1.2
Text: Thank you for the tasty apple.

참고: Conversation Script 컴포넌트마다 포함된 Conversation Item ID는 모두 고유하게 설정해야 하지만, 그렇지 않을 경우 자신이 가장 잘 알아볼 수 있는 방식으로 할당하세요.
6. 첫 번째 Conversation Script 컴포넌트의 헤더를 클릭하여 Quest 컴포넌트의 Quest In Progress Conversation 필드로 드래그합니다. 이렇게 하면 플레이어 캐릭터가 필요한 아이템을 입수하지 못한 채 NPC에게 돌아왔을 때 해당 대화가 나타납니다.

7. 두 번째 Conversation Script 컴포넌트의 헤더를 클릭하여 Quest 컴포넌트의 Quest Completed Conversation 필드로 드래그합니다. 이렇게 하면 플레이어 캐릭터가 필요한 아이템을 인벤토리에 넣어 NPC에게 돌아왔을 때 해당 대화가 나타납니다.
8. 변경 사항을 저장합니다.
3. 퀘스트용 인벤토리 아이템 생성
이제 준비된 퀘스트에 대한 인벤토리 아이템을 생성해 보겠습니다.
1. 씬 뷰에서 인벤토리 아이템을 추가할 위치를 오른쪽 클릭합니다.
2. 컨텍스트 메뉴가 나타나면 Gameplay Prefabs > Add InventoryItem Here를 선택합니다. Inventory Item 게임 오브젝트가 해당 위치에 나타납니다.

3. 계층 구조에서 새로운 게임 오브젝트를 오른쪽 클릭하고 Rename을 선택합니다. 이 게임 오브젝트를 'Golden Apple'로 명명합니다. Inventory Item 게임 오브젝트의 이름은 퀘스트의 완료 여부를 식별하는 역할을 하므로 매우 중요합니다.
4. 인스펙터에서 Inventory Item 컴포넌트를 찾습니다. 이 컴포넌트는 다양한 수의 인벤토리 아이템을 하나의 게임 오브젝트에 연결하는 데 사용됩니다.

Count 파라미터를 3으로 변경합니다. 이제 이 아이템을 집으면 플레이어 캐릭터의 인벤토리에 황금 사과(Golden Apple) 3개가 지급됩니다.
팁: 이후의 퀘스트에서 퀘스트 아이템을 변경하고 싶다면 Sprite 필드에서 다른 스프라이트 에셋을 선택하면 됩니다.
4. 황금 사과를 퀘스트 스크립트에 추가
이제 생성된 인벤토리 아이템을 NPC의 퀘스트에 연결해야 합니다.
1. 계층 구조에서 Quest 게임 오브젝트(NPC 게임 오브젝트의 자식 오브젝트)를 선택합니다.
2. 인스펙터에서 회색 화살표를 클릭하여 Enable on Quest Start 섹션을 펼칩니다.

3. Size 파라미터를 1로 설정합니다. 그러면 Element 0이라는 새로운 필드가 아래에 나타납니다.
4. 계층 구조에서 Golden Apple 게임 오브젝트를 Element 0 필드로 드래그합니다.

이제 Golden Apple 게임 오브젝트는 플레이어가 연결된 NPC 대화 옵션을 선택하여 퀘스트를 활성화한 경우에만 게임에 나타납니다.
5. 이제 Required Items 섹션을 펼쳐 Size 파라미터를 1로 설정합니다. Element 0이라는 새로운 섹션이 아래에 나타납니다.
6. 계층 구조에서 Golden Apple 게임 오브젝트를 Element 0 섹션의 Item 필드로 드래그합니다
7. Count 필드를 1로 설정합니다. 이는 퀘스트를 올바르게 완료하기 위해 플레이어의 인벤토리에 있어야 하는 필요한 아이템의 수를 의미합니다.
5. 퀘스트 스크립트를 NPC 대화 스크립트 항목에 연결
퀘스트를 설정했으므로 이제 퀘스트를 NPC 대화 분기에 연결할 수 있습니다. 플레이어가 선택된 대화 스크립트 항목을 트리거하는 응답을 선택하면 해당 퀘스트가 활성화됩니다.
본 예제에서는 플레이어 캐릭터가 NPC와 인사하며 칭찬하면 Golden Apple 퀘스트가 활성화됩니다.
1. 계층 구조에서 NPC 게임 오브젝트를 선택합니다.
2. 인스펙터에서 Conversation Script 컴포넌트를 찾습니다. 편집을 위해 Conversation Script Item 1.1('Why thank you! Please will you get me an apple?')을 엽니다.
3. 계층 구조에서 Quest 게임 오브젝트를 Quest (Optional) 필드로 드래그합니다. 그러면 퀘스트가 이 대화 선택지에 할당됩니다.

4. Update를 클릭합니다.
5. 플레이 모드로 들어가 변경 사항을 테스트합니다. 연결된 NPC 대화 옵션을 선택하면 Golden Apple 퀘스트가 시작됩니다.
팁: 퀘스트는 NPC 대화 트리의 첫 번째 대화 스크립트 항목이 아닌 NPC 대화 분기점에 할당되어야 합니다. 이는 한 NPC의 대화 트리에서 플레이어에게 여러 퀘스트를 추가할 수 있음을 의미합니다.
6. 퀘스트 완료 보상 추가
이제 플레이어가 NPC의 퀘스트를 올바르게 완료할 수 있습니다. 하지만 보상이 없는 퀘스트는 별로 매력적이지 않습니다.
퀘스트에 보상을 추가하는 방법은 다음과 같습니다.
1. 씬 뷰에서 NPC의 옆 공간을 오른쪽 클릭합니다.
2. 컨텍스트 메뉴가 나타나면 Gameplay Prefabs > Add InventoryItem Here를 선택합니다. Inventory Item 게임 오브젝트가 해당 위치에 나타납니다. 인벤토리 아이템에 사용되는 기본 스프라이트는 Golden Apple입니다. 이제 플레이어에게 다른 아이템인 닭을 보상으로 제공해 보겠습니다.
3. 인스펙터에서 Inventory Item 컴포넌트를 찾습니다. Sprite 필드 오른쪽의 원형 선택 버튼을 클릭하고 이름이 _Chicken인 스프라이트를 선택합니다.
4. 인스펙터에서 Animator 컴포넌트의 헤더에 있는 체크박스를 활성화합니다. 그러면 닭에 애니메이션이 추가됩니다.

5. 계층 구조에서 해당 보상 아이템 게임 오브젝트를 오른쪽 클릭하고 Rename을 선택합니다. 그리고 Chicken으로 이름을 변경합니다.
6. 계층 구조에서 Quest 게임 오브젝트를 선택합니다. Reward Items 섹션을 펼칩니다.
7. Size 파라미터를 1로 설정합니다. 그러면 Element 0이라는 새로운 필드가 아래에 나타납니다.
8. 계층 구조에서 Chicken 게임 오브젝트를 Element 0 필드로 드래그합니다.
9. 계층 구조에서 Chicken 게임 오브젝트를 선택합니다. 인스펙터에서 Chicken 게임 오브젝트 헤더의 체크박스를 비활성화합니다.

그러면 Chicken 게임 오브젝트가 비활성화되고 보상으로 주어지기 전까지 플레이어가 해당 오브젝트를 수집할 수 없습니다.
10. 씬을 저장합니다.
이제 플레이 모드에 들어가 게임에 적용한 변경 사항을 테스트해 보세요.