초반 진행 단계를 퀘스트 형태로 나누고, 각 행동이 완료될 때 다음 단계로 넘어가도록 구조를 만들었다.

퀘스트 시스템은 DataTable 기반으로 구성했다.

각 퀘스트는 ID를 가지고 있으며, 제목, 목표 설명, 완료 조건, 목표 아이템 또는 설비 ID, 다음 퀘스트 ID를 데이터로 관리한다. 이를 통해 퀘스트 순서를 바꾸거나 목표를 수정할 때 코드 수정 없이 DataTable에서 조정할 수 있도록 했다.


퀘스트 진행 구조

퀘스트는 현재 진행 중인 CurrentQuestId를 기준으로 동작한다.
플레이어가 특정 행동을 하면 각 시스템에서 퀘스트 서브시스템에 알림을 보내고, 퀘스트 서브시스템은 현재 퀘스트의 완료 조건과 비교한다.

 

플레이어 행동 발생
→ QuestGuideSubsystem에 Notify 호출
→ 현재 퀘스트의 CompleteType / TargetId 비교
→ 조건이 맞으면 퀘스트 완료
→ 보상 지급
→ 다음 퀘스트로 이동


진행도 카운트 처리

일부 퀘스트는 한 번의 행동으로 끝나지 않는다.
예를 들어 몬스터 4마리 처치 퀘스트는 몬스터를 한 마리 잡을 때마다 진행도가 증가해야 한다.

이를 위해 퀘스트 데이터에 RequiredCount를 두고, 퀘스트 서브시스템 내부에서 CurrentProgress를 관리하도록 했다.

  • 몬스터 1마리 처치 → CurrentProgress + 1
  • CurrentProgress < RequiredCount → 아직 퀘스트 진행 중
  • CurrentProgress >= RequiredCount → 퀘스트 완료

퀘스트 보상 처리

퀘스트 완료 시 보상을 지급하는 기능도 추가했다.
예를 들어 몬스터 4마리 처치 후 보일러를 지급하거나, 특정 제작 단계를 완료한 뒤 컨베이어를 지급하는 방식이다.

보상 역시 코드에 직접 작성하지 않고 퀘스트 데이터에 넣을 수 있도록 했다.

 

퀘스트 완료

→ Rewards 배열 확인

→ 인벤토리에 보상 아이템 지급

→ 다음 퀘스트로 이동


스킬 해금 제한

튜토리얼 흐름상 스킬은 특정 시점 이후에만 해금되어야 했다.
그래서 퀘스트 데이터에 스킬 해금 가능 여부를 두고, 현재 퀘스트가 스킬 해금을 허용하지 않는 상태라면 스킬 해금을 막도록 했다.

 

현재 퀘스트에서 스킬 해금 불가

→ 스킬 해금 버튼 실패 처리

 

현재 퀘스트에서 스킬 해금 가능

→ 스킬 해금 진행

→ 퀘스트 완료 조건 검사


퀘스트 기반 게이트

퀘스트 진행에 따라 특정 구간을 열어주는 게이트도 함께 구현했다.
게이트는 RequiredCompletedQuestId를 가지고 있고, 해당 퀘스트가 완료되었는지 확인해서 열림/닫힘 상태를 결정한다.

 

필요 퀘스트 미완료

→ 게이트 닫힘

→ 플레이어 통과 불가

 

필요 퀘스트 완료

→ 게이트 열림

→ 플레이어 통과 가능

 

시각적으로는 Niagara 안개 이펙트를 사용해 막힌 길처럼 보이도록 했고, 퀘스트가 완료되면 안개가 사라지면서 길이 열리는 방식으로 구현했다.


정리

  • DataTable 기반 퀘스트 데이터 구성
  • CurrentQuestId 기반 현재 퀘스트 관리
  • CompleteType / TargetId 기반 완료 조건 검사
  • RequiredCount를 이용한 진행도 카운트 처리
  • 퀘스트 완료 시 보상 지급
  • 각 시스템에서 Notify 함수로 퀘스트 진행 연결
  • 스킬 해금 시점 제한
  • 완료 퀘스트 기반 게이트 개방