Unity에서 퀘스트 시스템 만들기

퀘스트는 많은 게임의 기본적인 부분으로, 플레이어에게 목표와 보상을 제공합니다. 이 튜토리얼에서는 Unity에서 간단한 퀘스트 시스템을 만드는 방법을 알아봅니다. 퀘스트 생성, 추적 및 완료에 대해 다룹니다.

프로젝트 설정

코딩을 시작하기 전에 간단한 Unity 프로젝트를 설정해 보겠습니다.

  1. 새로운 Unity 프로젝트를 만듭니다.
  2. 스크립트를 정리하기 위해 Scripts라는 이름의 새 폴더를 만듭니다.
  3. 퀘스트 데이터를 저장하기 위해 Resources라는 이름의 폴더를 만듭니다.

퀘스트 클래스 생성

첫 번째 단계는 제목, 설명, 완료 상태 등의 퀘스트 정보를 보관하는 Quest 클래스를 정의하는 것입니다.

using UnityEngine;

[System.Serializable]
public class Quest
{
    public string title;
    public string description;
    public bool isCompleted;

    public Quest(string title, string description)
    {
        this.title = title;
        this.description = description;
        this.isCompleted = false;
    }

    public void CompleteQuest()
    {
        isCompleted = true;
        Debug.Log("Quest Completed: " + title);
    }
}

퀘스트 관리자 생성

다음으로, 우리는 퀘스트를 처리할 관리자가 필요합니다. QuestManager 클래스는 활성 퀘스트를 저장하고 관리합니다.

using System.Collections.Generic;
using UnityEngine;

public class QuestManager : MonoBehaviour
{
    public List<Quest> quests = new List<Quest>();

    void Start()
    {
        // Example quests
        quests.Add(new Quest("Find the Key", "Find the key to unlock the door."));
        quests.Add(new Quest("Defeat the Dragon", "Defeat the dragon in the cave."));
    }

    public void CompleteQuest(string title)
    {
        Quest quest = quests.Find(q => q.title == title);
        if (quest != null && !quest.isCompleted)
        {
            quest.CompleteQuest();
        }
    }

    public List<Quest> GetActiveQuests()
    {
        return quests.FindAll(q => !q.isCompleted);
    }
}

UI에서 퀘스트 표시

플레이어에게 퀘스트를 표시하려면 간단한 UI가 필요합니다. 씬에 캔버스와 텍스트 요소를 만들어 퀘스트 목록을 표시합니다.

using UnityEngine;
using UnityEngine.UI;

public class QuestUI : MonoBehaviour
{
    public Text questListText;
    private QuestManager questManager;

    void Start()
    {
        questManager = FindObjectOfType<QuestManager>();
        UpdateQuestList();
    }

    void UpdateQuestList()
    {
        questListText.text = "Quests:\n";
        foreach (Quest quest in questManager.GetActiveQuests())
        {
            questListText.text += "- " + quest.title + ": " + quest.description + "\n";
        }
    }
}

퀘스트와의 상호 작용

퀘스트와 상호작용할 수 있는 기능을 추가해 보겠습니다. 예를 들어, 퀘스트를 완료하는 버튼을 추가할 수 있습니다.

using UnityEngine;

public class QuestGiver : MonoBehaviour
{
    public string questTitle;

    void OnTriggerEnter(Collider other)
    {
        if (other.CompareTag("Player"))
        {
            QuestManager questManager = FindObjectOfType<QuestManager>();
            questManager.CompleteQuest(questTitle);
        }
    }
}

퀘스트 시스템 테스트

퀘스트 시스템을 테스트하려면 QuestManagerQuestUI를 장면에 추가합니다. QuestGiver 스크립트가 첨부된 간단한 트리거 구역을 만들고 완료할 퀘스트 제목을 지정합니다.

결론

Unity에서 퀘스트 시스템을 만드는 기본 사항을 다루었습니다. 퀘스트를 만들고, 관리하고, UI에 표시하고, 상호작용하는 방법을 배웠습니다. 이러한 개념을 확장하여 Unity 프로젝트에서 더 복잡한 퀘스트 시스템을 만들 수 있습니다.