미니맵

Minimap

화면 한쪽 구석에 축소된 지도로 플레이어와 주변 적·아군의 상대 위치를 계속 보여주는 UI.

다른 이름: 레이더Radar
···
html
<div class="mmwrap"><div class="mm"><div class="fog" id="fog"></div><div class="grid"></div>
<div class="blip me"></div><div class="blip en" id="b1"></div><div class="blip en" id="b2"></div><div class="blip ally" id="b3"></div>
<div class="edgewrap" id="edgewrap"><div class="edge"></div></div></div></div>
css
.mmwrap{width:min(72%,220px);aspect-ratio:1}
.mm{position:relative;width:100%;height:100%;border-radius:50%;background:var(--surface);border:2px solid var(--line);overflow:hidden;box-shadow:0 6px 18px rgba(0,0,0,.12)}
.grid{position:absolute;inset:0;background-image:linear-gradient(var(--line) 1px,transparent 1px),linear-gradient(90deg,var(--line) 1px,transparent 1px);background-size:20% 20%;opacity:.5}
.fog{position:absolute;left:50%;top:50%;width:140%;height:140%;margin:-70% 0 0 -70%;background:conic-gradient(from 0deg, color-mix(in srgb,var(--accent) 20%,transparent), transparent 40deg);transform-origin:center}
.blip{position:absolute;width:9%;height:9%;border-radius:50%;top:50%;left:50%;transform:translate(-50%,-50%)}
.me{background:var(--accent);box-shadow:0 0 0 3px color-mix(in srgb,var(--accent) 25%,transparent)}
.en{background:var(--accent-2)}
.ally{background:var(--accent-3)}
.edgewrap{position:absolute;inset:0;transform-origin:50% 50%}
.edge{position:absolute;top:2%;left:50%;width:9%;height:9%;transform:translateX(-50%);background:var(--accent-2);clip-path:polygon(50% 0,0 100%,100% 100%)}
js
const fog=document.getElementById('fog');
const b1=document.getElementById('b1'), b2=document.getElementById('b2'), b3=document.getElementById('b3');
const edgewrap=document.getElementById('edgewrap');
let t=0;
function loop(){
  t+=0.02;
  fog.style.transform='rotate('+((t*40)%360)+'deg)';
  b1.style.transform='translate(calc(-50% + '+(Math.cos(t*0.8)*32)+'%), calc(-50% + '+(Math.sin(t*0.8)*32)+'%))';
  b2.style.transform='translate(calc(-50% + '+(Math.cos(t*1.3+2)*26)+'%), calc(-50% + '+(Math.sin(t*1.3+2)*26)+'%))';
  b3.style.transform='translate(calc(-50% + '+(Math.cos(t*0.5+4)*20)+'%), calc(-50% + '+(Math.sin(t*0.5+4)*20)+'%))';
  edgewrap.style.transform='rotate('+((t*16)%360)+'deg)';
  requestAnimationFrame(loop);
}
requestAnimationFrame(loop);

미니맵은 실제 월드 좌표를 원형(또는 사각형) 작은 뷰포트 좌표로 매핑한 것이다. 플레이어를 중심에 고정하고 지도 자체가 회전하는 방식(진행 방향이 항상 위)과, 북쪽을 항상 위로 두고 플레이어 아이콘만 회전하는 방식이 있다 — 어느 쪽이든 "지금 보는 방향"과 "지도 위 방향"이 어긋나지 않게 맞추는 게 핵심이다.

적·아군·목표 지점은 색만으로도 충분히 읽히게 만든다(빨강=적, 초록=아군, 노랑=목표 같은 관례). 화면 밖에 있는 중요한 대상은 미니맵 가장자리에 화살표로 눌러 붙여서 최소한 "저쪽에 있다"는 방향 정보는 남긴다.

정보를 너무 많이 얹으면(모든 아이템, 모든 지형선) 점들이 뭉개져서 오히려 못 읽는다. 미니맵은 큰 지도의 축소본이 아니라, 지금 순간 의사결정에 필요한 것만 추린 별도의 요약이라고 보는 편이 낫다.

언제 쓰나

탐험·전투가 공존하는 오픈월드·전략 게임 화면. 선형 스테이지나 실내 퍼즐처럼 위치 파악이 중요하지 않으면 생략한다.