Skip to content
Home » 유니티 미니 맵 | How To Make A Minimap Ui In Unity! 36 개의 새로운 답변이 업데이트되었습니다.

유니티 미니 맵 | How To Make A Minimap Ui In Unity! 36 개의 새로운 답변이 업데이트되었습니다.

당신은 주제를 찾고 있습니까 “유니티 미니 맵 – How to make a Minimap UI in Unity!“? 다음 카테고리의 웹사이트 https://hu.taphoamini.com 에서 귀하의 모든 질문에 답변해 드립니다: https://hu.taphoamini.com/photos/. 바로 아래에서 답을 찾을 수 있습니다. 작성자 고박사의 유니티 노트 이(가) 작성한 기사에는 조회수 2,023회 및 좋아요 46개 개의 좋아요가 있습니다.

유니티 미니 맵 주제에 대한 동영상 보기

여기에서 이 주제에 대한 비디오를 시청하십시오. 주의 깊게 살펴보고 읽고 있는 내용에 대한 피드백을 제공하세요!

d여기에서 How to make a Minimap UI in Unity! – 유니티 미니 맵 주제에 대한 세부정보를 참조하세요

미니맵 UI를 제작하는 동영상입니다.
In this video you will learn how to create Minimap UI with Unity Engine.
↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
00:00 Intro
00:12 Minimap Camera
01:53 Minimap UI
07:00 Minimap Customize
09:26 Minimap Culling Mask
✔ 리소스, 스크립트
https://drive.google.com/drive/folders/1vNDS70z4FHK-BO3CW_1zddEMdVudIvp5?usp=sharing
👍 양질의 교육 콘텐츠를 제작할 수 있도록 채널 맴버십에 가입하세요.
https://www.youtube.com/channel/UCArLLmJohRrA0bt5XAiN0qQ/join
👍 양질의 교육 콘텐츠를 제작할 수 있도록 고박사에게 후원을 해보세요. (카카오 페이)
https://donaricano.com/mypage/1727391785_jRwM86
※링크로 이동하시면 카카오 QR코드가 보입니다.
✅ 인프런 – 따라하면서 배우는 고박사의 하이퍼캐주얼 게임 시리즈 01
https://www.inflearn.com/course/%EA%B3%A0%EB%B0%95%EC%82%AC-%ED%95%98%EC%9D%B4%ED%8D%BC%EC%BA%90%EC%A5%AC%EC%96%BC-1?inst=c0847346
🔔 앞으로 올라오는 더 많은 강좌 동영상을 쉽게 보려면?
https://www.youtube.com/channel/UCArLLmJohRrA0bt5XAiN0qQ
여러분 안녕하세요. 고박사입니다.
항상 더 좋은 강의를 제작할 수 있도록 노력하겠습니다.
여러분의 관심과 응원은 저에게 큰 힘이 됩니다.
구독(Subscribe), 좋아요(Like)를 눌러주세요!!
감사합니다.
Unity Version 2021.2.8f1
#유니티엔진 #유니티강좌 #MINIMAP

유니티 미니 맵 주제에 대한 자세한 내용은 여기를 참조하세요.

유니티) 미니맵 만들기 RenderTexture – 뻔뻔한블로그

미니맵 만들기 ( RenderTexture) 미니맵을 만드는 방법도 여러가지가 있겠지만 이번에 학습할 내용은 랜더텍스처로 카메라를 추가해 캐릭터를 밑에 …

+ 여기에 자세히 보기

Source: funfunhanblog.tistory.com

Date Published: 4/30/2021

View: 727

유니티 심플 미니맵만들기 – UnityBeginner

안녕하세요 유니티 비기너입니다. 이번 시간에는 미니맵을 만드는 방법에 대해 소개해보겠습니다. 결과 화면. 1. 인스펙터 창 우측 상단에 Layer를 …

+ 여기에 더 보기

Source: unitybeginner.tistory.com

Date Published: 11/14/2022

View: 8595

Ace Combat Zero: 유니티로 구현하기 #8 : UI (3) – 미니맵 + 1 …

유니티에서 미니맵을 만드는 고전적인 방식이 있습니다. 미니맵 오브젝트만 보일 레이어를 하나 만듭니다. UI처럼 미니맵 아이콘만 보여줄 레이어요.

+ 더 읽기

Source: velog.io

Date Published: 3/27/2022

View: 1566

게임에 미니맵을 추가해보자! – 컴퓨터속 세상

조용한 개발자 님의 블로그입니다. 구독하기. 프로필 사진. 유니티 세상/유니티 스크립트 및 기술 저장의 다른 글.

+ 자세한 내용은 여기를 클릭하십시오

Source: computer-warehouse.tistory.com

Date Published: 5/8/2022

View: 6686

유니티 – 미니맵 만들기 (RenderTexture) – 뚜르의 공대일기

안녕하세요 러드입니다. 오늘은 유니티에서 미니맵 만들기를 해보겠습니다. 저격 스코프를 만드는 방식과 동일합니다만 새로운 블로그인만큼 ㅋ …

+ 여기에 더 보기

Source: ddur.tistory.com

Date Published: 7/2/2022

View: 3895

유니티 미니맵 만들기 – 과학기술블로그

유니티 미니맵 만들기. 심재형 2017. 12. 4. 11:04. 미니맵. utility > smoothfollow script. Camera Depth 0 수정필요. camera>. perspective : 원근감.

+ 여기에 표시

Source: decode.tistory.com

Date Published: 12/4/2022

View: 7266

미니맵 – RenderTexture / Culling Mask – 바닥 프로그래밍

Unity/R&D. 미니맵 – RenderTexture / Culling Mask. 아니맨 2020. 7. 1. 11:03. https://funfunhanblog.tistory.com/92 · 유니티) 미니맵 만들기 RenderTexture.

+ 더 읽기

Source: badakprogramming.tistory.com

Date Published: 5/2/2021

View: 1381

( Unity쨩 – 14일차 ) Canvas에 미니맵 띄우기 – 네이버 블로그

( Unity쨩 – 14일차 ) Canvas에 미니맵 띄우기 … 이번에 사용한 녀석은 Raw Image라는 녀석을 사용하였다. 그림으로 보고가자. 만드는 방법은 위와 같다.

+ 여기에 더 보기

Source: m.blog.naver.com

Date Published: 10/27/2022

View: 9696

주제와 관련된 이미지 유니티 미니 맵

주제와 관련된 더 많은 사진을 참조하십시오 How to make a Minimap UI in Unity!. 댓글에서 더 많은 관련 이미지를 보거나 필요한 경우 더 많은 관련 기사를 볼 수 있습니다.

How to make a Minimap UI in Unity!
How to make a Minimap UI in Unity!

주제에 대한 기사 평가 유니티 미니 맵

  • Author: 고박사의 유니티 노트
  • Views: 조회수 2,023회
  • Likes: 좋아요 46개
  • Date Published: 2022. 1. 29.
  • Video Url link: https://www.youtube.com/watch?v=IA9UfytQ5R8

유니티) 미니맵 만들기 RenderTexture

미니맵 만들기 ( RenderTexture)

미니맵을 만드는 방법도 여러가지가 있겠지만

이번에 학습할 내용은 랜더텍스처 로 카메라를 추가해 캐릭터를 밑에 바라보게 하는것이다.

(보통은 카메라도 연산비용이 크기 때문에 카메라를 추가하지 않고

캐릭터 실제 움직이는 위치를 계산해 이미지로 작은 미니맵을 만들어 준다고 한다.)

1) 카메라 추가

위에서 밑을 바라보는 카메라를 만들어 미니맵처럼 보이기위함이다.

하이라키창에서 마우스 오른쪽 클릭하고 카메라를 추가해준다.

이름은 기존 카메라와 헷갈리지 않게 미니맵카메라 정도로 바꿔준다.

2) 캐릭터 플레이어를 대신 할 오브젝트 추가

새로 추가한 카메라가 플레이어 캐릭터를 비추면되지만 보통 캐릭터에는 폴리곤과 많은 이미지들이 붙어 있기 때문에 미니맵에는 이렇게 보일 필요가 없다.

캐릭터의 어디에 있는지 위치정도만 보여주면 되기 때문에 나는 큐브를 생성하고 플레이어 자식으로 넣었다.

(미니맵 카메라는 사각이미지로 보일것이다.)

그리고 이 큐브 레이어를 ‘playercube’로 해준다. 이유는 밑에 설명

3) RenderTexture추가

랜더텍스처를 추가한다.

Render Texture는 런타임에서 생성 및 갱신되는 특수한 Texture로 카메라가 비추는 화면을 텍스처럼 가지고 있고 원하는 이미지에 그려줄 수 있는 텍스처라고 생각하면 된다.

4) 미니맵카메라 인스펙터 설정

새로 추가한 카메라에 셋팅을 해줘야한다.

첫 번째로 카메라가 Culling Mask를 설정해준다.

Culling Mask는 카메라가 보여질 레이어들은 체크하는 것이다. 맨 처음에는 Everything으로 되어 있을것이다.

방금 추가한 Cube는 ‘playercube’이기 때문에 이것은 체크해주고 player(실제 캐릭터)는 체크 해제 해준다.

나머지는 그릴 필요가 있는지 없는지 체크해서 상황에 맞게 설정해준다.

두 번째는 Target Texture를 아까 생성한 RenderTexture를 추가한다.

5) Raw Image 미니맵 이미지 생성

캔버스 밑에 Raw Image를 생성한다.

일반 Image와 다르게 텍스처를 설정 할 수 있기때문이다.

Texture에 여기에도 아까 생성한 랜더텍스처를 넣어준다.

플레이 (우측 상단)

여기서 추가 셋팅은 기존 카메라에서는 당연히 하늘을 보게 되면 아까 추가한 큐브가 보일 것이다.

기존 카메라에서 Culling Mask ‘playercube’를 체크 해제해서 안보이게 해주어야한다.

랜더 텍스처 : https://docs.unity3d.com/kr/530/Manual/class-RenderTexture.html

반응형

유니티 심플 미니맵만들기

반응형

안녕하세요 유니티 비기너입니다.

이번 시간에는 미니맵을 만드는 방법에 대해 소개해보겠습니다.

결과 화면

1. 인스펙터 창 우측 상단에 Layer를 (Minimap) 추가한다. 2. Main카메라의 Culling Mask에서 방금 추가한 Minimap을 제외시킨다. 3. 프로젝트 창 Create > RenderTexture를 생성합니다. 4. 카메라 오브젝트를 생성, 명칭을 MinimapCamera로 변경, Culling Mask에서 Minimap을 제외한 모든 mask를 제외, 3번에서 생성한 RenderTextture target Texture에 삽입 5. Ui > raw Image 생성, 3번에서 생성한 RenderTextture 삽입 6. 각각의 오브젝트에 미니맵에 표시할 이미지 추가 및 레이어 변경 한 줄 요약 ※ 특정 레이어만 보이는 카메라를 추가하고 Render Texture를 이용하여 카메라로 통해 보이는 화면을 미니맵처럼 구현합니다.

1. 인스펙터 창 우측 상단에 Layer를 추가한다.

※ Layer를 이용하여 추가 된 카메라가 Minimap 레이어층만 보이게하여 미니맵을 구현합니다.

2. Main카메라의 Culling Mask에서 방금 추가한 Minimap을 제외시킨다.

※ Main카메라에서는 Minimap을 제외하여 미니맵에 보여질 이미지들이 보이지 않게합니다.

3. 프로젝트 창 Create > RenderTexture를 생성합니다.

※ Render Texture를 이용하여 카메라에 비치는 장면을 raw image를 통해 보여지게합니다.

4. 카메라 오브젝트를 생성, 명칭을 MinimapCamera로 변경, Culling Mask에서 Minimap을 제외한 모든 mask를 제외, 3번에서 생성한 RenderTextture target Texture에 삽입

5. Ui > raw Image 생성, 3번에서 생성한 RenderTextture 삽입

6. 각각의 오브젝트에 미니맵에 표시할 이미지 추가 및 레이어 변경

※ 미니맵에 보여질 이미지들을 삽입합니다.

이상으로 미니맵을 만드는 방법에 대해 알아보았습니다.

다음엔 좀 더 좋은 정보로 찾아뵙겠습니다.

감사합니다.

반응형

Ace Combat Zero: 유니티로 구현하기 #8 : UI (3) – 미니맵 + 1인칭 시점

역시 UI는 할 게 무지하게 많습니다.

할 게 산더미인데 벌써 3편이고, 이거로 끝나는 것도 아니라니요.

전체 화면:

미니맵

아군/적군 UI

게임 내 대사

조준점

기총 UI

경고 UI

색상 변경

화면에 안 보이는 목표물의 위치를 가리키는 화살표

미니맵을 제외한 부분도 해결해야 하고,

1인칭 시점 UI는 1인칭에서만 보이도록 수정

이것도 해결해야 합니다.

우선 지난 포스트에서 해야했던 1인칭 시점 UI 컨트롤부터 하죠.

1인칭 시점 UI 컨트롤

이 스크린샷은 3인칭 시점,

이 스크린샷은 1인칭 시점입니다.

1인칭 시점에서만 보이고 3인칭 시점에서 보이지 않는 UI는,

속도계 (숫자 제외)

고도계 (숫자 제외)

방향계

자세계

스로틀

이렇게 5개입니다.

여기서 속도/고도 UI는 3인칭 뷰, 1인칭 뷰 모두 보이게 되는데요,

속도/고도 UI는 3인칭 뷰에서는 고개를 돌려도 위치가 고정되지만,

1인칭 뷰에서 고개를 돌릴 때 위치가 바뀌어야 합니다.

구현 방식을 생각해보면, 속도/고도 UI를 똑 떼어놓은 다음

카메라에 따라 3인칭 뷰, 1인칭 뷰에 붙여넣으면 되겠죠.

그리고 현재 각도에 따라서 위치를 조정해주면 될 것입니다.

1인칭 뷰 표시/비표시

먼저 활성화/비활성화될 1인칭 뷰는 한 곳에 모두 몰아넣어있는지 확인합니다.

(애초에 캔버스랑 카메라가 3인칭(공통) 뷰와는 분리해서 만들었죠?)

3인칭 뷰일 때 1인칭 UI 카메라를 비활성화시키느냐, 1인칭 UI 오브젝트나 캔버스를 비활성화시키느냐는 구현하는 사람 마음입니다.

저는 1인칭 UI 오브젝트를 비활성화하는 방향 으로 가겠습니다.

UIController에서 UI 오브젝트를 이미 변수로 얻어올텐데 또 카메라 변수를 얻어오기가 좀 귀찮아서요.

UIController.cs

[ Header ( “1st-3rd View Control” ) ] public RectTransform commonCenterUI ; public RectTransform firstCenterViewTransform ; public RectTransform thirdCenterViewTransform ; public void SwitchUI ( CameraController . CameraIndex index ) { bool isFirstView = ( index == CameraController . CameraIndex . FirstView || index == CameraController . CameraIndex . FirstViewWithCockpit ) ; firstCenterViewTransform . gameObject . SetActive ( isFirstView ) ; RectTransform parentTransform = ( isFirstView ) ? firstCenterViewTransform : thirdCenterViewTransform ; commonCenterUI . SetParent ( parentTransform ) ; }

CameraController.cs

void SetCamera ( ) { . . . GameManager . Instance . uiController . SwitchUI ( ( CameraIndex ) cameraViewIndex ) ; }

UIController 에 RectTransform.parent 를 바꾸는 코드를 추가했습니다.

CameraController 에 현재 활성화된 카메라 정보인 CameraIndex 가 있고,

이 값을 넘겨줘서 1인칭 뷰/3인칭 뷰 UI에 붙여놓는 작업을 하게 됩니다.

1인칭 UI, 그 UI의 부모가 될 객체를 모두 끌어다 붙입니다.

카메라에 따라 UI를 표시/비표시하는 기능은 만들어졌고,

이제 1인칭 기준으로는 카메라를 돌릴 때 1인칭 UI 위치가 바뀌는 기능을 만들어야 합니다.

시선에 따른 UI 위치 이동

주위를 돌아볼 때의 카메라 시선 정보 (회전값) 역시 CameraController 에 있습니다.

회전값을 잘 가공해서 위치로 변환해주면 될 거에요.

UIController.cs

[ Header ( “1st-3rd View Control” ) ] public RectTransform commonCenterUI ; public RectTransform firstCenterViewTransform ; public RectTransform thirdCenterViewTransform ; public Canvas firstViewCanvas ; public Vector2 firstViewAdjustAngle ; void Start ( ) { firstViewAdjustAngle = new Vector2 ( 1 / firstViewAdjustAngle . x , 1 / firstViewAdjustAngle . y ) ; . . . } public void AdjustFirstViewUI ( Vector3 cameraRotation ) { Vector2 canvasResolution = new Vector2 ( firstViewCanvas . pixelRect . width , firstViewCanvas . pixelRect . height ) ; Vector2 convertedRotation = new Vector2 ( cameraRotation . y * firstViewAdjustAngle . x , cameraRotation . x * firstViewAdjustAngle . y ) ; firstCenterViewTransform . anchoredPosition = convertedRotation * canvasResolution ; }

CameraController.cs

void Rotate1stViewCamera ( ) { . . . uiController . AdjustFirstViewUI ( rotateValue ) ; } void Rotate1stViewWithCockpitCamera ( ) { . . . uiController . AdjustFirstViewUI ( rotateValue ) ; }

AdjustFirstViewUI(Vector3 cameraRotation) 은 카메라 회전값을 좌표로 변환해주는 기능을 수행합니다.

여기서 Vector2 firstViewAdjustAngle 이라는 변수가 있는데,

시선을 돌릴 때 가로/세로 축으로 각각 몇 도를 넘어가면 화면의 가장자리에 UI를 놓을지 결정하는 값입니다.

그리고 현재 캔버스 크기를 구한 다음, 변환된 각도 값을 서로 곱해서 1인칭 UI의 위치를 확정합니다.

그리고 CameraController 에서 시선의 회전값을 가지고 있으므로, 이 값을 UIController 에 넘겨주게 됩니다.

UIController 에 값을 설정하고 실행합니다.

X축은 방향이 반전되어야 해서 음수로 설정합니다.

모니터 해상도마다 다를 수 있지만 일단 제 기준으로는 이 값이 어느정도 적당하게 움직이는 것 같습니다.

적절한 위치에 놓인 것 같네요.

에이스 컴뱃 7에서도 1인칭 UI가 정확히 콕핏에 맞춰지진 않습니다. 대강 맞췄어요.

여기서 주의할 부분이 있는데,

1인칭 뷰 카메라의 Viewport Rect 값은 (0, 0, 1, 1)이어야 합니다.

만약 3인칭 뷰 카메라처럼 이렇게 약간의 공백이 있게 되면,

이렇게 UI가 잘리게 됩니다.

UI가 잘리지 않게 하기 위해서, 1인칭 뷰 카메라는 공백이 없도록 설정합시다.

전체 화면:

미니맵

아군/적군 UI

게임 내 대사

조준점

기총 UI

경고 UI

색상 변경

화면에 안 보이는 목표물의 위치를 가리키는 화살표

이제 전체 화면에서의 묵은 이슈들을 해결할 시간입니다.

하나씩 차례대로 하죠.

미니맵

표시할 미니맵은 3종류가 있습니다.

내가 조종하는 비행기를 기준으로 주변 상황 보기

조금 더 넓은 범위로 보기

전체 맵 보기

보시다시피 원래는 미니맵에 표현해줄 오브젝트가 되게 많습니다.

아군 비행기, 적 비행기, 적 타겟 비행기, 일반 목표물, 타겟 목표물 등이 있죠.

(뒤에 깔리는 지형 등은 둘째치고요)

근데 제가 만들려고 하는 스테이지는 1:1 보스전입니다.

게임 내내 미니맵에 빨간색 화살표 한 개만 있을 거라는 뜻입니다.

이렇게 일감을 성공적으로 줄이는군요.

1단계 미니맵

유니티에서 미니맵을 만드는 고전적인 방식이 있습니다.

미니맵 오브젝트만 보일 레이어를 하나 만듭니다.

UI처럼 미니맵 아이콘만 보여줄 레이어요.

화면에 띄우려는 오브젝트에게 Sprite Renderer를 줍니다.

그리고 Layer를 아까 만든 레이어로 설정합니다.

Orthographic 카메라를 하나 만들고, 위에서 아래를 보게 만듭니다.

(Rotation.x 를 90으로 주면 됩니다.)

Clear Flags = Solid Color , Projection = Orthographic 으로 설정합니다.

카메라의 Culling Mask를 미니맵 레이어만 선택되도록 설정합니다.

여기까지는 UI랑 비슷하죠.

Render Texture 파일을 하나 생성합니다.

생성한 Render Texture의 가로 세로 Size를 조절합니다.

미니맵이 정사각형 형태이므로 값을 동일하게 맞춰줍니다.

(298이라는 값은 미니맵 스프라이트 사이즈와 동일하게 맞추려는 용도였는데, 사실 상관없습니다.)

미니맵을 비추는 카메라의 Target Texture에 아까 만든 Render Texture를 넣어줍니다.

이제 카메라 부분을 보시면 방금 추가한 아이콘만 보이게 됩니다.

미니맵 UI를 만들어줍니다.

참고로 저는 이미지를 2개 사용해서 Map이 맨 뒤에, Map_center가 맨 앞에 오고,

화면에 띄울 오브젝트는 그 사이에 표시하게끔 만들려 합니다.

UI Raw Image를 만든 다음, Texture에 이전에 만든 Render Texture를 넣어줍니다.

그러면 Scene 화면에서 이렇게 미니맵이 만들어지게 됩니다.

움직이지 않지만 말이죠.

이제 스크립트로 카메라를 제어해야 합니다.

다시 원본 미니맵을 봅시다.

귀찮게도 플레이어가 미니맵의 중앙에 있는 게 아니라 약간 아래에 있습니다.

이 사실을 감안하면서 카메라 위치를 조정해줘야 해요.

MinimapCamera.cs

public class MinimapCamera : MonoBehaviour { public Transform target ; public float offsetRatio ; Camera cam ; void Start ( ) { cam = GetComponent < Camera > ( ) ; } void Update ( ) { Vector3 targetForwardVector = target . forward ; targetForwardVector . y = 0 ; targetForwardVector . Normalize ( ) ; Vector3 position = new Vector3 ( target . transform . position . x , 1 , target . transform . position . z ) + targetForwardVector * offsetRatio * cam . orthographicSize ; transform . position = position ; transform . eulerAngles = new Vector3 ( 90 , 0 , – target . eulerAngles . y ) ; } }

target 은 카메라가 따라갈 대상입니다. 플레이어의 비행기를 여기다 할당하면 됩니다.

offsetRatio 는 이미지 하단으로부터 몇 % 지점에 플레이어가 있는지 에 대한 값입니다. 이 값을 이용해서 카메라의 위치를 UI에 맞게 보정해줍니다.

미니맵 사진을 보면 대략 33% 쯤 되어보이네요.

간략하게 설명하면, UI에 맞도록 비행기가 향하는 방향(Y축 무시)의 일정 거리 앞에다가 카메라를 놓고, ( Vector3 position = … )

비행기의 방향에 따라 카메라도 같이 회전하도록 구현했습니다. ( transform.eulerAngles = … )

여기서 transform.position 의 y 값을 1로 고정하는데, 모든 미니맵 아이콘의 y 값은 0으로 둘 예정이기 때문입니다.

Clipping Planes 값을 최대한 낮추기 위해, 카메라와 미니맵 아이콘의 거리를 최소화하려고 합니다.

MinimapSprite.cs

[ RequireComponent ( typeof ( SpriteRenderer ) ) ] public class MinimapSprite : MonoBehaviour { void Update ( ) { transform . rotation = Quaternion . Euler ( 90 , transform . parent . eulerAngles . y , 0 ) ; transform . position = new Vector3 ( transform . parent . position . x , 0 , transform . parent . position . z ) ; } }

미니맵 아이콘 스크립트입니다. 아직은 세상 간단하죠.

우선 미니맵 스프라이트는 본체의 각도가 어떻게 되었든 간에 항상 똑바로 보여야 합니다. 사진처럼 같이 돌아가면 곤란해져요.

그러므로 transform.rotation 값에서 x = 90 을 줘서 항상 눕혀주고,

비행기가 바라보는 각도를 표현하기 위해 y = transform.parent.eulerAngles.y 로 설정합니다.

위치는 부모를 따라가도록 position.x 와 z 는 부모의 transform.position 으로 설정합니다.

아까 카메라 설명할 때 미니맵 아이콘의 y값 (글로벌 좌표)을 모두 0으로 한다고 했었기 때문에, y 값은 0으로 고정시킵니다.

이제 적 비행기에 추가했던 미니맵 아이콘 스프라이트에 MinimapSprite 를 추가하고,

미니맵 카메라에는 MinimapCamera 를 추가한 다음,

target과 offsetRatio를 할당하고 실행시켜보죠.

타겟 비행기 근처를 비행하면서 미니맵에 제대로 보이는지 확인해봅니다.

미니맵 밖에 있는 오브젝트 표시하기

사진의 왼쪽 하단을 보면, < 처럼 된 화살표가 보이죠? 미니맵 범위에 표시되지 않는 오브젝트들도 저렇게 표시해줘야 합니다. ...말하기는 쉽죠. 로직을 어떻게 짜야 할까요? 오브젝트가 화면에 안 잡히는 범위에 있는지 확인 그 때 미니맵 가장자리에 맞춰서 화살표 표시 1번 미니맵의 경우에는 플레이어의 회전 상태도 고려해서 화살표를 표시해야 함 근데 이 화살표를 띄우는 주체가 누구지? 오브젝트가 아이콘 스프라이트를 바꾸나? 아니면 미니맵이 화살표 오브젝트를 추가하나? 생각보다 신경쓸 게 많습니다. 우선 프로토타이핑만 해서 실증이 가능한지 정도만 다뤄보겠습니다. 카메라 하위에 화살표를 하나 만들어놓고, 그 화살표 하나만 움직여보죠. (어차피 1:1 보스전이니까 화살표는 하나면 되잖아요) 미리 말씀드리자면, 제가 만든 화살표 표시 스크립트는 "오브젝트가 미니맵에 화살표 추가를 요청" 하는 방식입니다. 화살표를 띄우는 주체는 미니맵입니다. MinimapCamera.cs Camera cam ; Vector2 size ; public Transform indicator ; void Start ( ) { . . . size = new Vector2 ( cam . orthographicSize , cam . orthographicSize * cam . aspect ) ; } void Update ( ) { . . . } public void ShowBorderIndicator ( Vector3 position ) { float reciprocal ; float rotation ; Vector2 distance = new Vector3 ( transform . position . x - position . x , transform . position . z - position . z ) ; distance = Quaternion . Euler ( 0 , 0 , target . eulerAngles . y ) * distance ; if ( Mathf . Abs ( distance . x ) > Mathf . Abs ( distance . y ) ) { reciprocal = Mathf . Abs ( size . x / distance . x ) ; rotation = ( distance . x > 0 ) ? 90 : – 90 ; } else { reciprocal = Mathf . Abs ( size . y / distance . y ) ; rotation = ( distance . y > 0 ) ? 180 : 0 ; } indicator . localPosition = new Vector3 ( distance . x * – reciprocal , distance . y * – reciprocal , 1 ) ; indicator . localEulerAngles = new Vector3 ( 0 , 0 , rotation ) ; } public void HideBorderIncitator ( ) { indicator . gameObject . SetActive ( false ) ; }

지금 작성한 코드는 미니맵 가장자리에 맞춰서 화살표 표시 를 구현한 부분입니다.

현재 카메라와 오브젝트 사이의 거리를 계산하고, ( Vector2 distance = … )

카메라의 회전을 고려해서 거리 벡터를 회전시킵니다. ( distance = … )

( 3. 1번 미니맵의 경우 회전 상태를 고려 를 적용했습니다. 다른 미니맵의 경우 이 코드를 실행하지 않게끔 구현하면 되겠네요.)

이렇게 계산한 거리는 카메라의 가장자리에 위치할 수 있도록 값을 조절합니다.

이렇게 오브젝트들이 배치되었을 때를 가정해봅시다.

두 빨간색 오브젝트가 X, Y 값이 모두 미니맵 범위를 넘어섰다고 해서 두 오브젝트 모두 이렇게 미니맵 코너에 화살표를 넣으면 안 됩니다.

대부분의 오브젝트가 코너에 몰릴 가능성이 있기 때문입니다.

이런식으로 거리 벡터를 재조정해서 두 빨간색 점에 위치하도록 조정해줘야 합니다.

if 문에서 이 거리를 재조정하는 계산이 들어가 있고, distance의 부호에 따라서 화살표의 회전값도 조정하고 있습니다. ( rotation = … )

화살표를 띄우는 위치와 회전값 계산이 끝나면 localPosition , localEulerAngles 에 값을 대입합니다.

MinimapSprite.cs

[ RequireComponent ( typeof ( SpriteRenderer ) ) ] public class MinimapSprite : MonoBehaviour { SpriteRenderer spriteRenderer ; public MinimapCamera minimapCamera ; void Start ( ) { spriteRenderer = GetComponent < SpriteRenderer > ( ) ; } void Update ( ) { . . . if ( spriteRenderer . isVisible == false ) { minimapCamera . ShowBorderIndicator ( transform . position ) ; } else { minimapCamera . HideBorderIncitator ( ) ; } } }

그 다음, 화면에 오브젝트가 잡히지 않는지 확인하는 방법으로

미니맵 아이콘이 그려지고 있는가? 를 사용하겠습니다.

SpriteRenderer.isVisible()

이 함수를 사용하면 아이콘이 미니맵에 그려지고 있는지 확인할 수 있습니다.

isVisible() == false 일 때 위에서 만든 미니맵 카메라의 화살표 표시 함수를 호출하도록 구현했습니다. ( minimapCamera.ShowBorderIndicator(transform.position); )

다시 보여지게 되면 minimapCamera.HideBorderIncitator() 를 호출해서 화살표를 숨깁니다.

지금 구현한 MinimapSprite 는 미니맵 카메라를 필요로 합니다.

등록한 후 실행해보죠.

(프로토타이핑하느라 일단 구조는 신경쓰지 않고 화살표 출력이 잘 되는지 봅시다.)

화살표는 잘 나오는 것 같습니다.

2단계 미니맵, 3단계 미니맵

2단계 미니맵의 특징을 보면,

1단계보다 넓음

카메라가 회전하지 않음

플레이어 아이콘이 바뀜

카메라의 Size를 조정해주고,

Render Texture의 UI 크기도 조정해주고,

회전 안 시키고,

플레이어 아이콘도 보여주게 하면 될 것 같습니다.

3단계 미니맵은 2단계에서 한 가지만 바뀝니다.

맵 전체를 보여줌

그러니까 한 번에 구현해보죠.

MinimapCamera.cs

내용이 너무 쩔어줘서 보실 분만 보세요.

public class MinimapCamera : MonoBehaviour { public enum MinimapIndex { Small , Large , All } public Transform target ; public GameObject playerIcon ; public float offsetRatio ; public float smallViewSize ; public float largeViewSize ; public float allViewSize ; Camera cam ; Vector2 size ; public Transform indicator ; public float indicatorSize ; float sizeReciprocal ; int minimapIndex ; public void ChangeMinimapView ( InputAction . CallbackContext context ) { if ( context . action . phase == InputActionPhase . Performed ) { minimapIndex = ( ++ minimapIndex ) % 3 ; SetCamera ( ) ; } } public void SetCamera ( ) { switch ( ( MinimapIndex ) minimapIndex ) { case MinimapIndex . Small : cam . orthographicSize = smallViewSize ; cam . cullingMask &= ( 1 << LayerMask . NameToLayer ( "Minimap" ) ) ; break ; case MinimapIndex . Large : cam . orthographicSize = largeViewSize ; cam . cullingMask |= ( 1 << LayerMask . NameToLayer ( "Minimap (Player)" ) ) ; break ; case MinimapIndex . All : cam . orthographicSize = allViewSize ; break ; } size = new Vector2 ( cam . orthographicSize , cam . orthographicSize * cam . aspect ) ; } public void ShowBorderIndicator ( Vector3 position ) { float reciprocal ; float rotation ; Vector2 distance = new Vector3 ( transform . position . x - position . x , transform . position . z - position . z ) ; if ( distance . x == 0 || distance . y == 0 ) return ; if ( ( MinimapIndex ) minimapIndex == MinimapIndex . Small ) { distance = Quaternion . Euler ( 0 , 0 , target . eulerAngles . y ) * distance ; } if ( Mathf . Abs ( distance . x ) > Mathf . Abs ( distance . y ) ) { reciprocal = – Mathf . Abs ( size . x / distance . x ) ; rotation = ( distance . x > 0 ) ? 90 : – 90 ; } else { reciprocal = – Mathf . Abs ( size . y / distance . y ) ; rotation = ( distance . y > 0 ) ? 180 : 0 ; } float scale = sizeReciprocal * GetCameraViewSize ( ) ; indicator . localScale = new Vector3 ( scale , scale , scale ) ; indicator . localPosition = new Vector3 ( distance . x * reciprocal , distance . y * reciprocal , 1 ) ; indicator . localEulerAngles = new Vector3 ( 0 , 0 , rotation ) ; if ( indicator . gameObject . activeInHierarchy == false ) { indicator . gameObject . SetActive ( true ) ; } } public void HideBorderIncitator ( ) { indicator . gameObject . SetActive ( false ) ; } public float GetCameraViewSize ( ) { return cam . orthographicSize ; } void Awake ( ) { minimapIndex = ( int ) MinimapIndex . Small ; cam = GetComponent < Camera > ( ) ; SetCamera ( ) ; sizeReciprocal = indicatorSize / GetCameraViewSize ( ) ; } void Update ( ) { Vector3 targetForwardVector = target . forward ; targetForwardVector . y = 0 ; targetForwardVector . Normalize ( ) ; Vector3 position ; float cameraRotation ; if ( minimapIndex == ( int ) MinimapIndex . Small ) { position = new Vector3 ( target . transform . position . x , 1 , target . transform . position . z ) + targetForwardVector * offsetRatio * cam . orthographicSize ; cameraRotation = – target . eulerAngles . y ; } else { if ( minimapIndex == ( int ) MinimapIndex . Large ) { position = new Vector3 ( target . transform . position . x , 1 , target . transform . position . z ) ; } else { position = new Vector3 ( 0 , 1 , 0 ) ; } cameraRotation = 0 ; } transform . position = position ; transform . eulerAngles = new Vector3 ( 90 , 0 , cameraRotation ) ; } }

2, 3번 미니맵에서도 사용할 수 있도록 미니맵 카메라의 기능을 그냥 많이 추가했습니다.

Input Event에 따라서 모드 변경

모드에 따라 orthographicSize (카메라가 비추는 범위) 변경

(카메라가 비추는 범위) 변경 1번 미니맵이 아닐 때는 카메라 회전 및 오프셋 미사용

카메라와 오브젝트가 겹치는 상황에 ShowBorderIndicator가 호출될 경우 에러 발생 수정

플레이어 아이콘 표시/미표시 : Culling Mask 값 변경

값 변경 미니맵 밖의 오브젝트를 표시하는 화살표도 Size에 맞게 크기 변경

AircraftController 에 연결되어 있던 Input Event를 MinimapCamera 에 연결시킵니다.

MinimapSprite.cs

public float iconSize ; public float depth ; float sizeReciprocal ; void Start ( ) { spriteRenderer = GetComponent < SpriteRenderer > ( ) ; sizeReciprocal = iconSize / minimapCamera . GetCameraViewSize ( ) ; depth *= 0.01f ; } void Update ( ) { . . . float scale = sizeReciprocal * minimapCamera . GetCameraViewSize ( ) ; transform . localScale = new Vector3 ( scale , scale , scale ) ; }

미니맵 스프라이트에는 현재 카메라 사이즈에 맞도록 크기를 조절하는 기능을 추가합니다.

카메라의 orthographicSize 가 커지면 더 넓은 범위를 비추게 되고, 미니맵 아이콘의 크기는 작게 보이게 됩니다.

크기에 맞게 스케일을 조정해서 어느 미니맵을 보든 적당한 크기로 보이도록 만들어줍니다.

*이 기능은 미니맵 밖에 있는 오브젝트를 보여주는 화살표도 적용되어야 합니다.

그리고 depth 기능도 추가했는데, 미니맵 아이콘이 겹쳐버릴 때는 아이콘들이 깜빡일 수 있기 때문에 꼭 구분되어야 하는 아이콘은 depth를 바꿔줍니다.

플레이어의 미니맵 아이콘은 항상 위에 있어야 하므로, depth를 1 올립니다.

(실제 y 좌표는 depth * 0.01만큼 올라갑니다.)

값을 모두 할당한 다음 실행합니다.

1단계 미니맵에서 벗어날 때까지 유지하다가, 2단계 – 3단계 순으로 넘어가는 모습입니다.

그러고보니 미니맵 배경을 안 바꿔줬네요.

빠르게 배경 이미지를 만들어서 넣어주고,

RenderTexture 크기도 키워줍니다.

음… 2단계와 3단계 미니맵은 아이콘 크기를 재설정해줘야 할 것 같습니다.

아니면 카메라를 좀 손보거나요.

MinimapCamera.cs

public GameObject [ ] minimaps = new GameObject [ 3 ] ; public void SetCamera ( ) { . . . for ( int i = 0 ; i < minimaps . Length ; i ++ ) { minimaps [ i ] . gameObject . SetActive ( i == minimapIndex ) ; } } CameraController 에서 카메라 전환할 때 카메라를 활성화/비활성화해줬던 것처럼, 여기서도 미니맵 3개를 활성화/비활성화해주는 코드를 넣습니다. 이제 타겟 근처를 지나가면서 아이콘들이 잘 보이는지 확인하면 됩니다. 코드의 구조가 좀 이상하고 아이콘 크기가 너무 커보이긴 하지만, 목표는 달성한 것 같습니다. 이렇게 1인칭 시점과 미니맵 부분을 끝냈는데요, 전체 화면: 미니맵 아군/적군 UI 게임 내 대사 조준점 기총 UI 경고 UI 색상 변경 화면에 안 보이는 목표물의 위치를 가리키는 화살표 이 남은 것들을 4편에 다 끝낼 수 있으면 좋겠군요. 생각보다 미니맵 만들기가 시간을 많이 잡아먹었습니다.

게임에 미니맵을 추가해보자!

게임을 만들다보면 미니맵을 만들어야 하는 상황이 발생합니다.

오늘은 미니맵 제작하는 방법에 대해 알아보고자 합니다.

혹시 경로를 타고 들어오시다가 궁금하신 분들은

1

다음과 같이 오브젝트를 생성하세요

사실 이 과정은 크게 중요하지 않습니다. 다만 미니맵이 정상적으로 작동 되는지

확인하기 위해 제작하는 단계입니다.

2

Project 항목에서 오른쪽마우스 클릭 Create -> Material을 선택합니다.

이 과정은 마테리얼 색상을 추가하는 단계인데 다른 오브젝트와 구별을 위해 사용합니다.

3

Albedo 값을 빨간색으로 바꿉니다

빨간색이 싫으시면 다른 색으로 하셔도 무방하답니다 🙂

4

다음 큐브에 플레이어가 될 오브젝트를 제외하고( 1개의 큐브를 제외하고) 나머지 오브젝트를 전부 클릭하여 해당 Material을 적용시켜 줍니다

5

다음과 같은 항목으로 저는 설정 하였습니다.

이후 Cube 자식개체로 Main Camera 오브젝트를 넣습니다.

6

이제 카메라를 하나 더! 생성합니다.

카메라를 생성하는 방법은 2가지 입니다.

하나는 Hierarchy에서 오른쪽 마우스 -> Camera를 생성

두번째 Hierarchy 에서 오른쪽 마우스 -> Create Empty 생성 -> Add Component에서 Camera 추가

첫번째 방법은 생성 후 반드시 Flare Layer GUI Layer Audio Listener 컴포넌트 항목을 삭제 하셔야 합니다.

7

생성된 오브젝트의 이름을 MiniMapCam으로 변경합니다. 사진에는 MiniMap으로 되어 있지만 제가 실수로 빼먹었습니다 🙁

만들어진 오브젝트 카메라도 플레이어 자식 개체로 추가하시고 포지션을 Y축 20

로테이션을 X축을 90도로 기울여 줍시다

8

Hierarchy 에서 오른쪽 마우스 -> UI -> Raw Image를 추가 합니다. 이제 이 영역이 미니맵으로 표시가 됩니다.

9

Rect Transform에서 Anchor을클릭하여 오른쪽으로 바꿉니다. 이 과정을 하지 않으면 해상도에 따라 값이 크게 변하게 됩니다.

이후 다음과 같은 설정값을 하시면 됩니다.

10

Project 항목에서 오른쪽마우스 -> Create -> Render Texture 항목을 생성합니다. 이름을 MiniMap으로 설정합니다

11

이제 생성했었던 MiniMapCam 항목에 있는 Target Texture에 10번에서 만들었던 Render Texture를 적용시켜 줍니다.

12

그리고 RawImage에도 Texture를 적용시켜 줍니다!

13

짠! 이제부터 정상적으로 미니맵이 적용된 것을 보실 수 있습니다.

이 과정은 텍스쳐에 카메라 값을 계속해서 받아와서 실행하는 방법이라 보시면 됩니다. 저는 미니맵으로 적용 하였으나 경우에 따라서 CCTV 같은 효과도 할수 있지요!

뚜르의 공대일기

안녕하세요 러드입니다.

오늘은 유니티에서 미니맵 만들기를 해보겠습니다.

저격 스코프를 만드는 방식과 동일합니다만

새로운 블로그인만큼 ㅋ 새롭게새롭게.

유니티 버전은

5.6.0f 입니다.

준비물

적을 표시할 마크와 플레이어를 표시할 마크

sort of…

전체 맵을 찍은 텍스쳐.

위에서 밑을 바라보는 Y축 기준으로 찍으시면 됩니다.

무슨 쉐이더를 사용하면 편하게 된다고도 하는데..

걍 간편하게 캡쳐해서 하는걸로..

어차피 미니맵인만큼 자세한 건물지형보다는

찍은 후 포토샵으로 후보정 하는 경우가 많아서

저 같은 경우에는 걍 캡쳐한다음에

스프라이트모드로 바꿔버렸지만 포토샵으로 후보정하는게

좋습니다.

저 같은 경우에는 조금 스크립트를 모르셔도 할 수 있도록

쉽게 꾸며보았습니다.

전체 맵의 땅 부분만 복사를 하여서

밑으로 내린 다음 (위는 안되는게 하늘을 보면…ㄷㄷ;;)

그 땅에 (Plane아니면 Cube겠네요)

텍스쳐를 입혀버립니다.

그럼 위 같은 것이 보입니다.

밑으로 내리실 때 Y축으로만 내리셔야 하는데

이유인즉슨 적과 플레이어의 X,Z 값과 마커의 값이 같을 것이기 때문입니다.

그 후 복사해준 미니맵용 땅을 프로젝트로 가져와서

프리팹으로 선언해준다음..

Material 하나를 만들어줍니다.

RenderTexture 도 하나 만들어줍니다.

이러면 프리팹까지 총 3개의 파일이 생기는데요

Material에 Select부분에 텍스쳐를 넣어주세요~

그 다음

미니맵용 카메라를 하나 만들어서

미니맵만 비추게 조정해줍니다.

Camera의 TargetTexture 부분을 미리 만들어준

RenderTexture를 넣어주면 다른 거 말고 딱 요것만 보게 됩니다.

자 그러면 이제 미니맵은 보일겁니다.

이제 그러면 Plane이라던지 아니면 뭐

미니맵으로 볼만한 사각형하나 가져와서 메인카메라 앞에 놔주세요 위치는 뭐

놓으시고 싶으신곳..

그 다음 그 화면에다가 아까 만들어주었던 Material을

넣어주시면 뙇 보입니다.

로테이션이 안맞을 수 있으니 이 부분은

알아서 돌려서 맞춰주세요.

그럼 이제 마커를 각각 플레이어와 enemy에 넣어줍니다.

public class Marker : MonoBehaviour {

public Transform PlayerMark;

Vector3 Markert;

// Use this for initialization

void Start () {

PlayerMark = GameObject.FindWithTag(“MainCamera”).transform;

}

// Update is called once per frame

void Update () {

this.transform.position = new Vector3(PlayerMark.position.x, PlayerMark.position.y – 216, PlayerMark.position.z);

}

}

플레이어 마커 스크립트입니다.

뭐 그냥 단순히 업데이트로 해주었습니다.

근데 계속 돌아가서 메모리 잡아먹을 수 있으니

코루틴으로 바꿔주도록 하세요.

전 급하게 하느라 걍 쓴거지만…

적의 마커는 스크립트를 따로 안주었는데요

그냥 적 밑에 붙여주고 Y값만 다르게 해주었네요.

생각해보니.. 플레이어도 이렇게 하는게 더 효율적인것 같네요..? 메모리 하나더 안잡아먹어두 되구… (참고로 마커는 2D라서 3D게임에서 쓰시려면 크기 조절과 로테이션 조절은 알아서..)

오늘은 RenderTexture를 이용해서 미니맵을 간단히 구현해보았는데요.

모르시는 부분 있으시면 댓글로 남겨주세요~

그럼 오늘은 여기까지!

RenderTexture / Culling Mask

유니티) 미니맵 만들기 RenderTexture

미니맵 만들기 ( RenderTexture) 미니맵을 만드는 방법도 여러가지가 있겠지만 이번에 학습할 내용은 랜더텍스처로 카메라를 추가해 캐릭터를 밑에 바라보게 하는것이다. (보통은 카메라도 연산비

funfunhanblog.tistory.com

( Unity쨩 – 14일차 ) Canvas에 미니맵 띄우기

이번에 사용한 녀석은 Raw Image라는 녀석을 사용하였다.

그림으로 보고가자.

만드는 방법은 위와 같다. 이렇게 만드는 것이다!

Raw Image와 Image의 경우 가장 뚜렷한 차이는 Image의 경우는 Sprite를 받고, Raw Image의 경우는 Texture를 받는다는 것이다.

생각을 해보면, 미니맵 같은 경우는 실시간으로 계속 변화를 가지는 녀석이다.

Sprite라는 것은 이미지를 의미한다고 생각하면 편하겠다.

이미지는 그때 그때의 사진만을 가지기 때문에 실시간으로 변하는 녀석에게는 넣어주기가 애매하다.

그렇기 때문에 미니맵이나 FPS 게임에서의 화면에 비치는 자신의 캐릭터의 팔 등을 넣어주기에 적절하고, Image같은 경우는 Sprite를 뿌리는 것이기 때문에 실시간으로 변하지 않는 장비창 등등에 어울리는 녀석이라고 할 수 있다.

이제 이 Raw Image라는 녀석을 이용해서 만들어보자.

위의 빨간색 네모 친 곳에 아까 만든 Render Texture를 넣어주도록 하자 !

물론 배치도 왼쪽 Scene에서처럼 해주도록 하자 !

이제 결과를 확인해보자.

아주 아름답게 넣어진 것을 확인할 수 있다.

키워드에 대한 정보 유니티 미니 맵

다음은 Bing에서 유니티 미니 맵 주제에 대한 검색 결과입니다. 필요한 경우 더 읽을 수 있습니다.

See also  깔 라만 시 효능 | 깔라만시효능과 부작용 드시기전에 확인하세요~ 모든 답변
See also  자몽 청 만들기 | 자몽청 만들기 220 개의 가장 정확한 답변

See also  알함브라 박신혜 코트 | 게임에서 죽으면 현실에서도 죽는 100억 짜리 Ar 게임렌즈를 갖게 된 현빈에게 벌어진 일 #즐거움앳홈파티 [알함브라궁전의추억] 154 개의 자세한 답변

이 기사는 인터넷의 다양한 출처에서 편집되었습니다. 이 기사가 유용했기를 바랍니다. 이 기사가 유용하다고 생각되면 공유하십시오. 매우 감사합니다!

사람들이 주제에 대해 자주 검색하는 키워드 How to make a Minimap UI in Unity!

  • 유니티 엔진
  • 유니티 강좌

How #to #make #a #Minimap #UI #in #Unity!


YouTube에서 유니티 미니 맵 주제의 다른 동영상 보기

주제에 대한 기사를 시청해 주셔서 감사합니다 How to make a Minimap UI in Unity! | 유니티 미니 맵, 이 기사가 유용하다고 생각되면 공유하십시오, 매우 감사합니다.

Leave a Reply

Your email address will not be published. Required fields are marked *