미니맵 배경 이동 처리

플레이어 이동
→ 플레이어 월드 좌표 가져오기
→ Material Parameter의 X, Y 값 갱신
→ 미니맵 배경 위치 변경

미니맵 이미지에는 Dynamic Material Instance를 적용했다.
코드에서 미니맵 위젯이 생성될 때 머티리얼 인스턴스를 만들고, 매 Tick마다 플레이어 위치를 머티리얼 파라미터로 전달하도록 했다.

MiniMapMID->SetScalarParameterValue(TEXT("X"), Location.X);
MiniMapMID->SetScalarParameterValue(TEXT("Y"), Location.Y);

플레이어가 이동할 때 미니맵 배경도 실시간으로 갱신


플레이어 방향 화살표 구현

미니맵 중앙에는 플레이어 방향을 나타내는 화살표 이미지를 배치했다.

플레이어의 회전값 중 Yaw 값을 가져와서 화살표의 회전값에 적용했다.

ImagePlayerArrow->SetRenderTransformAngle(Rotation.Yaw);

플레이어가 바라보는 방향에 따라 미니맵의 화살표도 함께 회전한다.


지도 UI 구현

지도에는 플레이어 위치 아이콘을 표시하고, 플레이어의 월드 좌표를 지도 이미지 크기에 맞게 변환해서 아이콘 위치를 갱신했다.

플레이어 월드 좌표
→ LevelDimension 기준으로 정규화
→ MainMap Canvas 크기에 맞게 변환
→ PlayerIcon 위치 갱신

const float Scale = CanvasDimension / LevelDimension;

ImagePlayerIcon->SetRenderTranslation(
    FVector2D(Location.X * Scale, Location.Y * Scale)
);

또한 미니맵과 마찬가지로 플레이어의 Yaw 값을 사용해 큰 지도 위의 플레이어 아이콘도 회전하도록 했다.


CommonUI 방식으로 지도 위젯 열기

현재 프로젝트는 CommonUI 기반이므로, AddToViewport()를 사용하지 않았다.

UKOUISubsystem::OpenWidget(this, MapSystemWidgetTag);

UI.Widget.Map.MainMap
→ UI.Layer.GameMenu
→ WBP_MainMap

큰 지도는 입력을 받는 메뉴 성격이므로 GameMenuLayer에 배치했다.


정리

- 게임 시작 시 미니맵 표시
- 플레이어 이동에 따른 미니맵 배경 갱신
- 플레이어 방향에 따른 미니맵 화살표 회전
- M 키로 큰 지도 열기
- 큰 지도 위 플레이어 위치 표시
- ESC로 큰 지도 닫기
- CommonUI 기반 UI Layer 구조 적용