Unity

퀘스트 시스템

우대비 2025. 4. 28. 10:47
반응형

퀘스트의 데이터를 의미하는 QuestDataSO

 

퀘스트 안의 작업을 의미하는 TaskDataSO

 

 

- Quest Data SO 속성 소개

  1. Quest ID : 퀘스트 고유의 ID값
  2. Icon : UI에서 보여지는 이미지 (기획에 따라 삭제 가능)
  3. Quest Name : 퀘스트 이름
  4. Quest Description : 퀘스트 설명
  5. Tasks : 퀘스트안의 작업(TaskDataSO)를 List 형태로 관리
  6. Reward : 퀘스트 완료 후 받게될 보상
    1. Item Id : List<int>
    2. Gold : int
    3. Exp : int
  7. Acception Condition : 퀘스트를 진행하기 위한 선행 조건
    1. Pre Quest Id : List<int>
    2. Required Item id : List<int>
    3. Required Level : int
  8. Use Audo Complete : 자동 완료
  9. Is Cancelable : 취소가 가능한 퀘스트인지
  10. Is Savable : 저장이 가능한 퀘스트인지

- Task Data SO 속성 소개

  1. Task Id : 작업 고유의 ID값
  2. Task Name : 작업 이름
  3. Task Description : 작업 설명
  4. TaskCategory : 작업의 종류 (킬, 아이템 줍기, 대화 등)
  5. Action Type : 진행도가 오르는 방법
    1. 몬스터 10마리 사냥 → 진행도 1씩 증가
    2. 10초 대기하기 → 진행도 1씩 감소
    3. 10연속 강화 → 강화 성공시 +1, 실패시 초기화
  6. TargetID : 몬스터의 ID 혹은 NPC의 ID, 아이템의 ID
  7. success Count : 몬스터 10마리 사냥 → suuccess Count = 10
  8. Can Receive Reports During Completion : 성공시에도 상태가 바뀔 수 있는지
    1. 아이템 100개 모으기 퀘스트 → 성공 상태에서 50개를 버린다면 진행중 상태로 변경

사용 방법

    void Start()
    {
        var quest = Managers.Quest.Register(testQuest);
        quest.onCompleted += (quest) =>{
            Debug.Log("퀘스트에 바인딩");
        };

        Managers.Quest.onQuestCompleted += (quest) =>{
            Debug.Log($"{quest.QuestData.QuestName} 퀘스트 매니저에 바인딩"); 
        };    

        StartCoroutine(TEST());
    }
  • 퀘스트 등록 (QuestDataSO를 등록 → 나중에는 id값으로 등록할 수 있도록 확장할 예정)
    private IEnumerator TEST()
    {
        while(true)
        {
            yield return new WaitForSeconds(1f);
            Managers.Quest.ReceiveReport(ETaskCategory.Kill, 13, 1);
        }
    }
  • Managers.Quest.ReceiveReport에 Task의 Category와 TargetId값, 진행도 증가 수를 인자로 보냄

 

 

- 결과

 

 

반응형
LIST

'Unity' 카테고리의 다른 글

유니티 코루틴의 동작원리  (1) 2025.05.12
TIL: Unity 인벤토리 시스템 구현  (2) 2025.05.01
TIL - Addressable 설계  (2) 2025.04.23
계층형 유한 상태 머신  (0) 2025.04.09
State Machine  (0) 2025.04.08