프로젝트/언데드 서바이벌 프로젝트

4장. 맵이동

MuscleDeveloper5683 2023. 10. 12. 22:24
728x90
SMALL

1. 타일 그리기

2D 타일맵을 사용해 타일을 만들어보자

 

1.1 타일 팔레트 보기

 

Window -> 2D -> Tile Palette

 

 

1.2 타일 에셋을 생성시켜주자

 

Create -> 2D -> Tiles -> Rule Tile

 

 

유니티에서 같은 룰 타일을 근접 배치했을 때, 정해둔 규칙에 따라서 다른 스프라이트를 표시하도록 하는 것을 룰 타일(Rule Tile)이라고 한다.

 

타일 애셋을 생성시킨 모습

 

 

Number of Tiling Rule 인접한 타일에 따라 이미지가 정해지는 타일

 

 

1.3 타일 에셋 설정

OutPut 을 Random 으로 설정해 무작위 배치

Size 를 10개로 늘려서 준비 되어있는 Tile 들을 넣어준다(무작위)

Noise - 값을 통하여 타일맵을 랜덤으로 배치

 

 

 

그 후 완성된 Tile 애셋을 Tile Palette 에 드래그 드랍해서 넣어주자.

 

Tile Palette 에 드래그 드랍된 모습

 

 

이제 Scene 에서 타일맵을 만들어 주자

 

1.4 타일맵 생성

 

2D Object -> Tilemap -> Rectangular

 

1.5 타일 맵 그리기

 

Tile Palette에서 하단에 Brush를 통해 타일 맵을 그려주면 된다.

 

Line Brush 를 사용하여 맵을 그려보자

 

아래와 같이 Line 을 그려주고 Tile Palette에서 페인트모양 버킷툴을 눌러 Line 안을 채워주자

 

x - 20, y - 20 로 지정

 

이와 같이 맵이 타일맵이 만들어진 모습을 볼 수 있다.

 

 


2. 재배치 이벤트 준비

플레이어가 이동하는 방향에 타일맵을 재배치(생성) 하여 가는 방향에 맵이 생성될 수 있도록 하기 위해

 

2.1 물리 작용을 위한 Setting

 

★ Used By Composite 를 체크해야 적용된다.

★ IsTrigger 를 체크해줘야 바닥과 플레이어가 충돌나지 않는다.

★ 움직이면 안되기 때문에 Body Type을 키네메틱 or 스태틱으로 설정해준다.

 

 

Tile Map Collider, Rigid Body 물리 적용(충돌) 을 위해 추가 시켜준다.
Composite Collider 2D 각각의 나눠진 타일(Collider)을 하나로 합치기 위해서 사용

 

 

2.2 타일맵에 태그 추가 후 충돌 범위 설정

 

각각에 맞게 태그 설정해주면 된다  ex - Tile Map - Ground

 

타일 맵에 Ground, Area 태그가 추가 된 모습

 

플레이어 자식오브젝트로 Area를 생성해 충돌 범위를 만들어 주자

(Player의 이동에 따라 맵이 움직이기 때문에 플레이어를 중심점으로 잡는다)

 

 

그 후 Area의 태그를 설정하고

size 로 충돌 범위를 설정하자 (타일맵 X,Y 사이즈에 맞춰서)

 

 

2.3 재배치 스크립트 작성

 

재배치 이벤트를 위해 스크립트를 작성해보자

GameManager.cs - 해당 씬 전역에서 게임 전체를 관리하기 위한 스크립트

 

→ Manager는 왜 사용할까? ← 

  • 관리자 역활을 하는 오브젝트로 단 하나만 존재하며, 언제 어디서든 접근이 가능하다.(편의성 ↑)
  • Manager 스크립트는 딱 하나만 Static으로 만들고 사용하고자 하는곳에서 Instance를 참조하면된다.
    (그러기 위해 Public 이어야 한다.)

 

GameManager와 같은 스크립트는 매번 오브젝트에 추가하지 않고 Scene에 빈게임 오브젝트(Managers)를 하나 만들어서 그곳에서 컴포넌트에 스크립트를 추가해서 관리하는 것이 좋다.

 

 

 

GameManager 스크립트 작성

 


3. 타일맵 재배치

Reposition.cs - 타일맵의 이동을 위해

 

해당 타일맵에 Reposition 스크립트를 추가해주자
만약 타일맵이 더 추가되면 추가되는 오브젝트들에도 cs 추가하기

 

 

 

3.1 타일맵 복사본을 3개더 추가해주자

이렇게 타일맵 4개가 배치되었을 때 타일맵 하나당 x,y 사이즈는 20이고

4개가 정사각형 모양으로 배치 되었을 때 x -40 , y - 40값이 나온다.

 

각각의 타일맵 생성 후 Reposition.cs를 추가한 모습

 

 

3.2 타일맵 스크립트 작성

 

 

 

충돌처리(Trigger)에 관한 함수

[Trigger 와 Collision 의 차이는 C#,Unity 카테고리에서 자세히 정리]

OnTriggerEnter2D(Collider2D other)  오브젝트간 충돌이 일어날때 처음 한번만 호출되는 함수
OnTriggerStay2D(Collider2D other)  오브젝트간 충돌이 일어나는 동안 지속적으로 호출되는 함수
OnTriggerEnter2D(Collider2D other) 
오브젝트간 충돌에서 벗어날때 한번 호출되는 함수

 

[아래 키워드들도 C#,Unity 카테고리에서 정리]

Mathf 란? - Mathf 클래스는 게임의 개발에서 필요한 다양한 종류의 수학 함수 모음을 제공한다.

Mathf.Abs - 값이 음수가 나올 때 양수 값으로 만들어주기 위한 절대값이다.

 

삼항 연산자? - 연산자의 한 종류로 세 개의 항을 가진 연산자이다.

사용법 - (조건) ? (True일 때 값) : (False 일 때 값);

왜 사용할까? - if else와 같은 구문을 한줄로 요약하여 표현이 가능하기에 if else 구문과 동일하며, 삼항연산자를 사용하여 한줄로 간단하게 표현하기 위해서이다.

 


4. 카메라 설정

 

4.1 Main Camera 에서 Pixel Perfect Camera컴포넌트를 추가해주자.

 

Reference Resolution - 카메라 크기 계산을 위한 참고 해상도

 

타일맵의 Pixels per Unit과 동일하게 Assets Pixels Per Unit 을 설정해주면 된다.

 

 

 

4.2 시네머신을 이용한 카메라 이동

 

1. Package Manager -> Cinemachine을 설치해주자

2. Main Scene 에서 Virtual Camera(카메라 감독) 를 생성해주자

3. Virtual Camera - Follow에 Player을 넣어주자

4. Main Camera - Update Method를 Fixed Update 로 바꿔주자

 

Virtual Camera 설정

 

Main Camera 설정

728x90