프로그래밍/Unity, MAUI, Mono

[Unity] 미니맵 만들기 - 4. 카메라의 뷰포트(Viewport)를 이용하여 상호작용 가능한 미니맵 만들기

당근천국 2024. 9. 14. 15:30

미니맵에 상호작용이 필요하다면 이전에 설명한 두 가지 방식은 사용하기가 매우 까다롭습니다.

 

미니맵용 카메라도 메인카메라처럼 상호작용이 된다면 따로 추가 작업을 할 필요가 없습니다.

이게 가능하려면 화면에 카메라를 2개 표시하면 되겠죠?

그게 바로 뷰포트(Viewport)를 이용한 방법입니다.

 

연관글 영역

 

 

1. 카메라 생성

미니맵용 카메를 생성해 줍니다.

미니맵의 확대 축소와 같은 기능을 넣으려면 '투사(Projection)'를 원근(Perspective)으로 설정해야 합니다.

 

 

2. 뷰포트 설정 

뷰포트는 카메라를 화면에 표시하는 위치를 지정하는 기능입니다.

 

이 값은 비율입니다.

1=100%입니다.

 

메인 카메라의 경우 'X:0,Y:0, W:1,H:1'이렇게 되어 있습니다.

이렇게 되면 항상 화면크기와 일치하게 됩니다.

 

 

미니맵용 카메라는 원하는 위치에 출력되어야 하므로 '뷰포트 사각형(Viewport Rect)'을 조절하여 원하는 위치와 크기를 지정해 줍시면 됩니다.

 

 

비율이다 보니 화면크기가 바뀌면 다시 조정해야 합니다.

런타임에서 화면크기가 변한다면 스크립트에서 다시 계산하여 크기와 위치를 조절해야 합니다.

이게 화면에 미리보기도 되지 않는 것과 겹쳐서 초기 설정하는 게 엄청 힘듭니다 ㅎㅎㅎㅎ

 

아래 스크린샷을 보면 오른쪽 검정 칸이 뷰포트가 표시되는 위치입니다.

전혀 표시가 되지 않습니다 ㅎㅎㅎㅎ

 

그나마 다행인 건 에디터에서 실행하면 뷰포트를 런타임에서도 수정할 수 있으니까 이것을 이용하여 작업하면 좀 편하게 자리 잡을 수 있습니다.

 

 

3. 메인 카메라와 다른 미니맵의 표시 

1) 오브젝트에 레이어를 설정하고
2) 카메라의 '컬링 마스크(Culling Mask)'를 설정해 줍니다.

 
이 부분은 이전 글에서 자세히 다루었습니다.
참고 : "[Unity] 미니맵 만들기 - 1. 개요 및 카메라 설정" 의 '4. 메인 카메라와 다른 미니맵의 표시'챕터

 

 

마무리 

테스트 프로젝트 : github - dang-gun/UnitySamples/MiniMapTest

 

다른 방법은 미니맵을 클릭해도 아무것도 할 수 없지만 뷰포트를 이용하면 메인카메라와 동일하게 동작합니다.

레이어와 레이 케스트를 이용하면 컨트롤할 수 있습니다.

 

단지 다른 요소(예> UI)가 뷰포트 위로 올라올 수 없다는 문제가 있습니다.

 

구조상 미니맵보다는 전체맵이라는 미니맵을 크게 보는 기능에 더 적합합니다.

보통 전체맵은 화면 크기와 비율을 유지하는 경우도 많으니 말이죠.

 

하지만 미니맵에서도 상호작용이 필요한 경우가 있으니 그러면 이제 계산해야죠 ㅎㅎㅎㅎ