코딩의 신 67

김동관·2026년 1월 9일

오늘 한 일

QuestManager가 퀘스트 데이터를 관리하고 →
UI는 QuestManager를 참조해서 목록을 만들고 →
QuestItem은 클릭 이벤트만 담당한다

스크립트 구조

핵심 스크립트 구조도

GameManager
   └── QuestManager
           ├── QuestData (메인/서브 퀘스트 데이터)
           ├── CurrentQuest
           └── QuestUIController
                   ├── QuestListUI
                   │      └── QuestItem (프리팹)
                   └── QuestDetailUI

스크립트별 역할 정리

GameManager

역할

게임 전체에서 공유되는 매니저들의 “최상위 컨트롤러”

QuestManager, Player, UIManager 등 공통 시스템을 보유

중요 포인트

DontDestroyOnLoad

다른 매니저들이 참조하기 전에 가장 먼저 초기화

GameManager.Instance.QuestManager

QuestManager를 직접 생성하지 않고, GameManager를 통해 접근

QuestManager (핵심)

역할

퀘스트의 실제 데이터와 상태를 관리

현재 진행 중인 퀘스트

퀘스트 수락 / 완료 / 갱신 처리

가지고 있는 것

메인 퀘스트 목록

현재 선택된 퀘스트

UI에 전달할 퀘스트 정보

절대 UI를 직접 제어하지 않음
→ 데이터만 제공

QuestUIController

역할

I 키 입력으로 퀘스트 UI 열고 닫기

QuestManager로부터 퀘스트 데이터를 받아 UI에 전달

UI 제어 전담 스크립트

데이터 생성 x

로직 판단 x

“보여주기만 함”

QuestListUI

역할

퀘스트 목록을 동적으로 생성

퀘스트 개수만큼 QuestItem 프리팹 생성

foreach (QuestData quest in questList)
{
    Instantiate(questItemPrefab);
}

퀘스트가 늘어나도 코드 수정 없이 자동 대응 가능

QuestItem (프리팹 스크립트)

역할

퀘스트 하나를 표현하는 UI 버튼

클릭 이벤트만 담당

public void OnClick()
{
    QuestUIController.ShowQuestDetail(questData);
}

절대 퀘스트 로직을 처리하지 않음

상태 변경 x

완료 처리 x

QuestDetailUI

역할

선택된 퀘스트의 상세 정보 표시

이름

목표

설명

questNameText.text = quest.title;
questDescText.text = quest.description;

단방향 구조

QuestItem → QuestDetailUI

데이터는 QuestManager 기준

퀘스트 생성 & 표시 순서 (중요)

게임 시작 시

GameManager Awake

QuestManager Awake

메인 퀘스트 데이터 로드

UI는 아직 표시 x

I 키 입력 시

QuestUIController → UI 활성화

QuestManager에게 퀘스트 목록 요청

QuestListUI가 QuestItem 프리팹 생성

Main 퀘스트 “방랑자” 표시

퀘스트 클릭 시

QuestItem 클릭

QuestDetailUI 호출

QuestManager의 데이터 기반으로

퀘스트 이름

목표

설명 표시

이 구조의 장점 (벨로그 포인트)

✔ 퀘스트 데이터와 UI 완전 분리
✔ 퀘스트 수 증가해도 구조 변경 없음
✔ 추후 NPC / 트리거 / 조건 시스템 연결 쉬움
✔ 디버깅 시 “문제 위치”가 명확함

다음 확장 시 자연스럽게 붙는 구조

NPCQuestGiver → QuestManager.AddQuest()

QuestConditionChecker

QuestProgressTracker

JSON / ScriptableObject 기반 퀘스트 데이터

profile
아이디어 뱅크

0개의 댓글