카테고리 없음

Unity 2D URP 미니맵 - 본캠프 56일차

julesnow 2025. 7. 1. 04:13

MiniMap 트러블슈팅 & UI 시스템 개선


📑 목차

⓵ 미니맵 트러블슈팅
 𝟙 체크리스트 & 현 상황
 𝟚 기능 요구사항 및 구조 정리
 𝟛 문제 상황 및 이슈 정리
 𝟜 동적 UI 생성/PopupCanvas 연결 이슈
 𝟝 남은 과제 및 정리
 𝟞 오전 튜터 피드백 요약
 𝟟 트러블슈팅 요약 (문제 & 원인)

⓶ 다음 계획
 𝟙 타일맵 그리기
 𝟚 미니맵 크기 조절
 𝟛 카메라 세팅 조절
 𝟜 총정리
 𝟝 회고

 


🗂️ 미니맵 트러블슈팅

𝟙 체크리스트 & 현 상황

  • 맵 데이터 → 2D 타일 그리드
     →  RoomManager.GenerateMapGrid() 로 만든  int[,] mapGrid  연결
  • 맵 전체 Bounds 계산
     -  RoomManager.GetMapBounds()  worldMin ,  worldMax  계산
  • MiniMapController.Initialize(mapGrid)
     - miniMapTilePrefab, miniMapContainer 연결 확인
  • 타일 생성 & 배치
     - 250×250 영역에 mapGrid 기반 타일 그리기

𝟚 기능 요구사항 및 구조 정리

  • 임시로 만든 타일맵(Tilemap)을 실제 게임 Stage 크기로 간주
  • 미니맵은 타일맵의 범위만큼만 표시 (자동화)
  • 미니맵이 타일맵 크기 자동 인지 → 사이즈 자동 조정
  • 임시 타일맵을 MiniMapUI가 직접 참조 (인스펙터 연결)
  • 타일맵 그린 후 미니맵 범위 동기화
public void DrawRoom(GameObject tempPlayer, GameObject[] tempEnemies)
{
    _tempDrawPlayer = tempPlayer;
    if (tempEnemies != null)
        _tempEnemies = tempEnemies;
    else
        _tempEnemies = new GameObject[0];

    CalculateMapBounds();
}
  • 타일맵 범위 기준으로 미니맵 좌표 계산
  • 미니맵 크기 자동 조정 함수 적용
private void CalculateMapBounds()
{
    BoundsInt bounds = _miniMapTilemap.cellBounds;
    Vector3 min = bounds.min;
    Vector3 max = bounds.max;

    _worldMin = new Vector2(min.x, min.y);
    _worldMax = new Vector2(max.x, max.y);

    _mapRect = _mapImage.rectTransform;

    AdjustMiniMapSize(bounds.size);
}

 


𝟛  문제 상황 및 이슈 정리

  • 플레이어/적 아이콘은 나오나 색상 오류(새까맣게 나옴)

  •  MiniMapUI(test2) 를 Resources에 넣으니 할당 문제 발생 (아래는 해결 과정)
    • 변수명 리팩토링:
         _mapImage → _miniMapRawImage 
         _mapRect → _miniMapRectTransform

    • 임시 null 체크/할당 로직 개선

    • MiniMapLayer 할당 후 MiniMapUICamera 밖으로 빼니 정상 작동

    • playerIcon에 tempPlayer 연결 이슈
        - TempPlayer(Transform, GameObject)
        - PlayerIcon(RectTransform, UI Object)

    • 아이콘 중복 생성 문제
        - Instantiate/Destroy 반복

𝟜 동적 UI 생성/PopupCanvas 연결 이슈

  • PopupCanvas 자동 생성/할당 문제
      - 플레이 시 UIManager에서 로드 → 동적 할당 필요
      - PopupCanvas 프리팹 Resources에 있어도 안 불러와짐
if (PopupCanvas == null)
{
    var canvasPrefab = Resources.Load<Canvas>("PopupCanvas");
    if (canvasPrefab != null)
    {
        PopupCanvas = Instantiate(canvasPrefab);
        PopupCanvas.gameObject.name = "PopupCanvas";
    }
    else
    {
        Debug.LogError("PopupCanvas prefab not found in Resources!");
    }
}
 
  • 위와 같이 코드 수정 후,
  • Resources에 PopupCanvas, UIManager를 추가해도 해결 안됨

  • 동적 생성/할당을 위해 씬에 미리 두지 않고, OpenUI에서 호출 방식 설계 필요할 듯

𝟝 남은 과제 및 정리

  • test2에서 playerIcon, enemyIcon 중복 생성 방지

  • UIManager에서 PopupCanvas 동적 할당/관리 로직 개선

  • StageController에서 동적 UI 제어 방식 재검토

  • 미니맵 카메라 세팅 재점검:
      - RenderTexture
      - CullingMask
      - 전용 레이어 분리

  • Stage ↔ 타일맵 연동 준비
      - Stage 데이터/오브젝트 정비, 연동

  • MiniMapUI에서 Room 위치/크기, 전체 월드 Bounds, 방 타입 등 자동 수집/표시

 


𝟞 오전 피드백 요약

  • 구현 목적/필요 기능부터 명확하게
  • 미니맵을 꼭 타일맵 기반으로 만들 필요?
  • “어떤 정보를 누구에게, 어떻게 보여줄 것인가”부터 정의
  • 미니맵은 RenderTexture/Camera/단순 UI 등 다양한 방식 참고
  • 핵심: 목적→방식 설계

 


𝟟 트러블슈팅 요약 (문제 & 원인)

프리팹/하이어라키 프리팹에서 삭제해도 하이어라키에 남아있는 오브젝트 수동 삭제 필요
스크립트 동적 생성 플레이어/적 아이콘을 MiniMapUI에서 직접 Instantiate, 하이어라키 관리
Stage 연동 랜덤/동적 맵일 때 전체 Bounds(worldMin, worldMax) 데이터 필수 연동
카메라 세팅 RenderTexture, MiniMapLayer, CullingMask 분리 체크
합치는 과정 개별 기능은 OK, 합칠 때 이슈 발생 → 시행착오로 조율

▪️다음 계획

𝟙 타일맵 그리기

  • 에셋보단, 테스트용 임시 타일맵 빠르게 배치/검증
  • 타일맵 오브젝트를 MiniMapUI에서 직접 할당/참조

𝟚 미니맵 크기 조절

  • CalculateMapBounds() 활용,
  • 바운드 기준으로 미니맵 사이즈 자동 맞춤

𝟛 카메라 세팅 조절

  • MiniMap 전용 카메라/Layer/RenderTexture/RawImage 세팅
  • MainCamera와 레이어 충돌 없게 분리
  • Canvas의 SortOrder/Layer, Overlay 사용 등 최종 확인


▪️총정리

  • Stage 정보 ↔ 미니맵 자동 연동 구조 완성
  • PopupCanvas, UIManager, 동적 UI 동작 확실히 정리
  • 각종 임시 오브젝트/데이터 중복 관리 확실히 처리
  • 카메라/레이어 충돌 방지

▫️ 회고

  • 논리에 따른 구조 설계의 필요성을 강하게 느낌
  • 동적 UI, 동적 오브젝트 관리에서 발생하는 이슈는
     생성→참조→파괴→데이터 동기화 전부 점검해야 실수 줄일 수 있음
  • 다양한 미니맵 구현 방식을 리서치/적용해보고
     프로젝트 목적에 맞는 구조로 계속 개선할 예정