본문 바로가기

Unity

[Unity] 퀘스트를 만들어보자(2)

728x90

퀘스트 만들기 2번째이다. 1번째보다는 많은 내용과 어려운 논리들이 있으니 유의하면서 보기바랍니다. 1편에 이어서 QusetManager 스크립트를 완성하겠습니다. 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
 
public class QuestManager : MonoBehaviour
{
    void NextQuest()
    {
        questId += 10;
        questActionIndex = 0;
    }
 
    void ControlObject()
    {
        switch (questId)
        {
            case 10:
                if (questActionIndex == 2)
                    questObject[0].SetActive(true);
                break;
            case 20:
                if (questActionIndex == 1)
                    questObject[0].SetActive(false);
                break;
        }
    }
 
    public int GetQuestTalkIndex(int id)
    {
        return questId + questActionIndex;
    }

 

NextQuest 함수는 퀘스트를 성공하였을 때 questId를 증가시켜주고 qusetActionIndex를 0으로 초기화 해주어 다음 퀘스트가 이어질 수 있게 해준다.

 

ControlObject 함수는 questObject에 있는 오브젝트를 조절해주는 역할을 한다. questId가 10이고 qustActionIndex가 2라면 첫번째 questObject를 활성화해주고, questId가 20이고 questActionIndex가 1이라면 첫번째 questObject를 비활성화해준다.

 

GetQuestTalkIndex 함수는 questId에 questActionIndex를 더해준 값을 반환해준다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
    public string CheckQuest(int id)
    {
        if (id == questList[questId].npcId[questActionIndex])
        {
            questActionIndex++;
        }
 
        ControlObject();
 
        if (questActionIndex == questList[questId].npcId.Length)
        {
            NextQuest();
            Debug.Log(questId);
        }
 
        return questList[questId].questName;
    }
 
    public string CheckQuest()
    {
        return questList[questId].questName;
    }
}

 

CheckQuest는 npc와 플레이어가 대화하는 순서가 맞다면 questActionIndex를 증가시켜주고, 대화하는 순서가 마지막에 도달하면 다음 퀘스트를 시작해주는 함수이다.

 

여기서 프로그래밍 기술이 하나 들어가는데 바로 오버로드이다. 같은 이름의 함수 CheckQuest가 존재하지만 위의 CheckQuest는 id를 인자로 받기 때문에 컴퓨터는 이 둘을 다른 함수로 인식한다.

728x90