퀘스트 트래커

Quest Tracker

화면 한쪽에 현재 목표와 하위 체크리스트를 계속 띄워두고, 완료되는 항목을 하나씩 체크해 보여주는 패널.

다른 이름: 목표 추적기Objective tracker퀘스트 패널
···
html
<div class="qtpanel"><div class="qttitle">SILENT RUINS</div><div class="qtbar"><div class="qtfill" id="qtfill"></div></div><ul class="qtlist" id="qtlist"></ul></div>
css
.qtpanel{width:min(90%,260px);background:var(--surface);border:1px solid var(--line);border-radius:10px;padding:clamp(8px,3vmin,14px)}
.qttitle{font:800 clamp(9px,2.8vmin,11px) monospace;color:var(--accent);letter-spacing:.06em;margin-bottom:6px}
.qtbar{height:5px;border-radius:3px;background:color-mix(in srgb,var(--fg) 12%,transparent);overflow:hidden;margin-bottom:8px}
.qtfill{height:100%;width:0%;background:var(--accent);transition:width .5s ease-out}
.qtlist{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:5px}
.qtlist li{display:flex;align-items:center;gap:6px;font:clamp(9px,2.8vmin,11px) inherit;color:var(--fg)}
.qtcheck{width:13px;height:13px;border-radius:4px;border:1.5px solid var(--line);flex:none;display:grid;place-items:center;font-size:9px;color:#fff;transition:all .25s}
.qtlist li.done .qtcheck{background:var(--accent-3);border-color:var(--accent-3)}
.qtlist li.done .qttext{color:var(--muted);text-decoration:line-through}
js
const items=['유물 조각 3개 모으기','입구 후예자 처치','제단으로 이동'];
const list=document.getElementById('qtlist');
const fill=document.getElementById('qtfill');
items.forEach(function(t){
  const li=document.createElement('li');
  li.innerHTML='<span class="qtcheck"></span><span class="qttext">'+t+'</span>';
  list.appendChild(li);
});
const lis=[...list.children];
let step=0;
function complete(){
  if(step>=lis.length){
    setTimeout(function(){
      lis.forEach(function(li){ li.classList.remove('done'); li.querySelector('.qtcheck').textContent=''; });
      fill.style.width='0%';
      step=0;
      setTimeout(complete, 1000);
    }, 1400);
    return;
  }
  const li=lis[step];
  li.classList.add('done');
  li.querySelector('.qtcheck').textContent='✓';
  step++;
  fill.style.width=(step/lis.length*100)+'%';
  setTimeout(complete, 1100);
}
setTimeout(complete, 700);

퀘스트 트래커는 "지금 뭘 해야 하는가"라는 질문에 메뉴를 열지 않고도 항상 답해주는 패널이다. 제목(퀘스트명) 아래 하위 목표를 목록으로 두고, 완료된 항목은 체크 표시와 함께 취소선이나 흐림 처리를 해서 남은 일과 끝난 일을 한눈에 구분한다.

목표가 완료되는 순간에는 체크 애니메이션과 짧은 진행바 채움을 함께 준다 — 자이가르닉 효과(끝나지 않은 일이 계속 신경 쓰이는 현상)와 정반대로, 완료 신호가 분명해야 그 일을 머릿속에서 내려놓을 수 있다. 여러 목표가 동시에 진행 중이면 지금 가장 가까운(혹은 플레이어가 선택한) 것만 상단에 강조해서 트래커가 목록으로 늘어지지 않게 한다.

너무 많은 퀘스트를 한 트래커에 욱여넣으면 정보 과부하로 정작 아무것도 안 읽는다. 활성 퀘스트는 소수로 제한하고, 나머지는 별도의 퀘스트 로그 화면으로 미루는 것이 일반적이다.

언제 쓰나

오픈월드·RPG처럼 여러 목표를 동시에 굴리는 게임의 플레이 중 화면. 단일 목표만 있는 선형 스테이지에는 과하다.