현재 메트로바니아 장르를 만들면서 할로우 나이트를 레퍼런스 삼아서 팀프로젝트를 제작중에 있다. 할로우나이트에서 가장 불편했던게 맵 시스템이었는데, 지도는 맵 어딘가에 있는 상인에게서 구매해야 했고 플레이어의 위치를 알려주는 아이템은 스토리 진행 후 마을에서 구매가 가능했다. 메트로바니아 장르의 특성상 맵을 헤매는 경우가 많은데 이부분 때문에 길을 못찾는 경우가 많아 길 찾는 시간을 많이 소요한게 아쉬워 팀프로젝트에서는 플레이어의 위치를 더 쉽게 파악할 수 있게 맵 시스템을 추가하려고 했다.
유니티에서 미니맵을 만드는 방법들을 검색해 봤는데 미니맵에 사용할 카메라를 하나 더 추가해 플레이어에게 정보를 전달하는 방식이었다.
하지만 이렇게 되면 문제점이 있었는데 맵의 그림이 복잡한 현재 팀프로젝트에서 미니맵에 사용하기에는 가독성이 좋지 않은게 문제였다.
때문에 미니맵에서 출력되는 부분을 간결하게 전달하는 방법을 알아보던 도중 콜라이더를 사용해 선을 그리는 방법을 찾아 코드로 작성했다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
[RequireComponent(typeof(LineRenderer))]
public class MiniMapRenderer : MonoBehaviour
{
public PolygonCollider2D mapCollider;
private LineRenderer lineRenderer;
// Start is called before the first frame update
void Start()
{
lineRenderer = GetComponent<LineRenderer>();
Vector2[] points = mapCollider.points;
lineRenderer.positionCount = points.Length + 1;
for(int i = 0; i < points.Length; i++)
{
lineRenderer.SetPosition(i, new Vector2(points[i].x, points[i].y));
}
lineRenderer.SetPosition(points.Length, new Vector2(points[0].x, points[0].y));
lineRenderer.loop = true;
}
}
여기서 RequireComponent
는 요구되는 컴포넌트를 종속성으로 자동 추가해주는 것을 말한다. 당장은 쓸 이유가 없었지만 코드를 찾던 중에 한번 작성해보는게 좋을 것 같아 추가해 봤다.
LineRenderer
는 두개 이상의 지점의 배열을 사용해 연결하는 직선을 그리는 컴포넌트다.
단순한 직선에서 시작해 복잡한 곡선까지 그릴 수 있어, 현재 사용중인 맵의 곡선에서도 활용이 가능했다.
Vector2
에서 PolygonCollider2D
를 참고해 콜라이더의 포인트들의 좌표를 배열로 저앙하고 라인렌더러의 포인트 갯수를 반영해준다.
다음 반복문을 이용해 해당 좌표들을 반영해준다.
마지막으로 맵에 사용하기 위해 모양이 만들어져야하니 가장 첫번째 위치로도 연결을 시켜준다.
이렇게해서 맵에 선들을 그리는데에는 성공했지만 PolygonCollider2D
의 위치가 정상적으로 반영되지 않는 문제가 있었다.
일단은 모서리 부분의 뿔처럼 튀어나온 부분이 현재 사용중인 콜라이더와 맞지 않았고 맵의 위치와 다른 곳에 선이 그려지는 문제가 있었다.
먼저 PolygonCollider2D
의 뿔처럼 나온 부분을 맵의 디자인에 맞춰서 고치는 작업에서 막혀 해당 부분을 해결중에 있다.