오늘 한 일
오늘은 사이드 퀘스트 진행 중 HUD에 표시되는 거리 값이 잘못 나오는 버그를 추적하고 해결했다.
겉으로 보기엔 단순한 UI 문제처럼 보였지만, 실제 원인은 퀘스트 타겟 선택 로직의 누락이었다.
사이드 퀘스트 「상처 입은 사냥꾼」 진행 중
HUD 마지막 줄에 표시되는 NPC와의 거리가
사냥꾼이 아닌 고블린 기준 거리로 표시되는 현상 발생
퀘스트 자체는 정상적으로 진행되고 있었고,
타겟 NPC ID(TargetID = 10004)도 올바르게 설정된 상태
QuestNpcTarget 등록 타이밍
싱글톤 / Awake 문제
Registry 구조 문제
등을 의심했으나, 핵심 원인은 다른 곳에 있었다.
핵심 원인
TalkToNPC 타입 퀘스트에 대한 타겟 반환 로직이 GetQuestTarget()에 누락되어 있었음
switch (quest.CompleteCondition)
{
case "KillMonster":
case "Investigate":
case "DestroyObject":
case "CollectItem":
// 타겟 반환 로직 존재
}
TalkToNPC 조건은 HUD에 표시해야 함에도 불구하고
GetQuestTarget()에서 null을 반환
그 결과 HUD는 이전 퀘스트에서 사용하던 타겟(고블린 Transform)을 그대로 유지
거리 계산이 고블린 기준으로 계속 이루어짐
해결방법
case "TalkToNPC":
return QuestTargetRegistry.Instance
.GetAnyTarget(quest.TargetID);
GetQuestTarget()가 null을 반환할 경우
이전 타겟을 그대로 유지하지 않도록 구조 확인
필요 시 currentTarget = null로 명시적 초기화
사냥꾼 퀘스트 진행 시 HUD 거리 정상 표시
퀘스트 타입별 타겟 처리 흐름 정리
퀘스트 시스템 확장 시 반드시 모든 CompleteCondition을 처리해야 한다는 교훈 획득
UI 문제처럼 보여도 실제 원인은 로직 누락인 경우가 많다
HUD가 이전 상태를 캐싱하고 있다면
null 처리 정책이 매우 중요하다
퀘스트 타입이 늘어날수록
switch / 분기 로직 누락은 가장 위험한 버그 포인트다
이번 문제는 설계가 잘못된 게 아니라
시스템 확장 과정에서 자연스럽게 발생한 버그였다