오늘 한 일
오늘은 사이드 퀘스트와 메인 퀘스트를 확장하면서,
퀘스트 HUD, 거리 표시, 상호작용 타겟 관리까지 전반적인 구조를 다듬는 작업을 진행했다.
겉보기엔 UI 작업처럼 보이지만, 실제로는 호출 순서 / 상태 충돌을 정리하는 구조 설계가 핵심이었다.
Collect / Investigate / Destroy 퀘스트 구조 통합
Investigate, CollectItem, DestroyObject 퀘스트마다
진행도는 오르는데
HUD 거리 표시가 안 뜨거나
완료 후에도 거리가 사라지지 않는 문제가 발생
QuestTargetRegistry를 중심으로
→ “HUD에 보여줄 타겟”과
→ “퀘스트 진행에 필요한 TargetID”를 분리
퀘스트 진행 ID ≠ HUD 표시용 ID
CollectItem은 CollectItemID
Investigate / DestroyObject는 TargetID
HUD는 Registry에 등록된 Transform만 조회
HUD 거리 표시 캐시 방식으로 안정화
타겟이 사라진 뒤에도
마지막 위치가 계속 HUD에 남아 있음
씬 전환 / 텔레포트 후 거리 표시가 꼬임
HUD가 직접 상태를 판단하지 않고,
“마지막 유효 타겟”만 캐시해서 표시
if (target != null)
currentTarget = target;
Registry에 더 이상 타겟이 없으면
currentTarget = null
거리 텍스트 자동 제거
Update 순서, 호출 타이밍에 영향받지 않게 됨
퀘스트 완료 시 HUD 상태 변화 (시각적 피드백)
퀘스트 진행도가 완료되면
HUD 배경을 초록색
거리 대신 “보상 수령 가능” 표시
if (progress.IsComplete)
{
backgroundImage.color = completedColor;
distanceText.text = "보상수령가능";
}
퀘스트 창을 열지 않아도
현재 상태를 HUD만 보고 즉시 인지 가능
Auto / TalkToNPC 퀘스트도 정상 반영
Auto 완료 퀘스트 HUD 문제 해결
시작하자마자 완료되는 퀘스트(CompleteCondition = Auto)가
HUD에서는 완료 처리되지 않음
진행도 0 / 1로 남아 있음
HUD가 QuestState가 아닌 Progress 기준으로 표시하고 있었음
progress.IsComplete 기준으로 HUD 상태 변경
QuestState.Completed와 HUD 표현을 분리
호출 순서 충돌에 대한 구조적 정리
작업 도중 가장 고민했던 부분은:
“이 구조, 나중에 병합하면 호출 순서 꼬이지 않나?”
현재 구조는 호출 순서에 의존하지 않음
이유:
QuestTargetRegistry = 데이터
QuestHUDUI = 표현
HUD는 Registry를 ‘조회’만 함