이번 글에서는 미니맵을 다뤄보겠다.
미니맵에 플레이어, 몬스터, 방과 통로를 렌더링하려고 한다.
이 때, 아직 한번도 입장하지 않은 방은 화면에 검은색으로 보이고 미니맵에는 물음표로 표시한다.
엄청 어렵진 않다.
미니맵 카메라를 설정하고, RenterTexture를 만들어 적용하면 된다.
그리고 RawImage에 RenderTexture를 적용하면 된다.
그리고 따로 표시할 오브젝트에 미니맵 전용 스프라이트를 하나씩 추가해서 layer를 minimap으로 바꿔주고
미니맵카메라에서 culling mask를 minimap으로 바꿔주면 그 스프라이트들만 보인다.
미니맵의 크기는 스프라이트 크기와, camera컴포넌트의 size, raw image의 트랜스폼을 조절해보면 된다.
이렇게 기본적인 세팅은 완성했다.
그럼 이제 안가본 방에 대해서 어떻게 처리할 것인가
먼저 그냥 화면에는 방 크기만한 검정 오브젝트를 생성해 붙인다. 물론 sorting order와 layer를 설정해서 문말고는 안보이게 하면된다.
그 후, 다른 오브젝트 하나를 더 만들어서 미니맵에 보일 스프라이트를 붙여준다.
그 후, layer를 바꿔주면 끝난다.
방 입장 시, 이 두개의 오브젝트를 삭제하면 미니맵 종료다.
public void StartRoom()
{
if (!isVisited)
{
isVisited = true;
if (fog != null) fog.SetActive(false); // 안개 제거
GameObject minimapImage = transform.Find("MinimapImage")?.gameObject;
if (minimapImage != null) minimapImage.SetActive(false); // 물음표 제거
if (minimapRoomSprite != null) minimapRoomSprite.SetActive(true); // 방 구조 표시
}
입장 했을 때 시작되는 StartRoom 함수에서 두 오브젝트를 비활성화시킨다.
// 미니맵 물음표
GameObject mapObject = new GameObject("MinimapImage");
SpriteRenderer qsr = mapObject.AddComponent<SpriteRenderer>();
qsr.sprite = questionMarkSprite;
qsr.sortingOrder = 3;
mapObject.layer = 13; // Minimap
mapObject.transform.SetParent(go.transform);
// 안개 오브젝트
GameObject fog = new GameObject("Fog");
SpriteRenderer fogSr = fog.AddComponent<SpriteRenderer>();
fogSr.sprite = floorSprite; // 바닥 타일 재사용
fogSr.color = Color.black; // 검정 안개
fogSr.sortingOrder = 1;
fogSr.sortingLayerName = "Creature";
fog.layer = LayerMask.NameToLayer("Default"); // 기본 레이어
fog.transform.SetParent(go.transform);
fog.transform.localPosition = Vector3.zero;
rc.fog = fog;
// 방 크기 설정
int xLen = Random.Range(minRoom, maxRoom);
int yLen = Random.Range(minRoom, maxRoom);
// 안개와 미니맵 스프라이트 스케일 조정
fog.transform.localScale = new Vector3(xLen, yLen, 1);
fog.transform.localPosition = new Vector2(xLen / 2.0f, yLen / 2.0f);
mapObject.transform.localPosition = new Vector2(xLen / 2.0f, yLen / 2.0f);
방을 만드는 함수에서 추가한다.
특별한 코드가 없기 때문에 설명은 생략한다.
비쥬얼적으로는 아주 처참하지만 오로지 기능구현에만 집중해서 진행 중이다.
다음 글에는 마지막으로 몬스터 ai와 플레이어의 전투를 마무리하고 이 프로젝트를 종료하려 한다.
미니맵완성한 간단한 플레이영상이다.
'2d 자동 맵생성' 카테고리의 다른 글
맵 자동 생성(12) (0) | 2025.05.15 |
---|---|
맵 자동 생성(10) (1) | 2025.05.14 |
맵 자동 생성(9) (0) | 2025.05.13 |
맵 자동 생성(8) (0) | 2025.05.13 |
맵 자동 생성(7) (0) | 2025.05.13 |