
타일맵은 유니티에서 제공해주는 기능으로, 타일 기반의 환경을 쉽게 만들 수 있게 해준다.
타일맵 시스템을 사용하여 작은 스프라이트들로 광대한 게임 환경을 구성할 수 있다.
Tilemap 시스템의 구성요소
이름 | 종류 | 기능 |
---|---|---|
Tilemap | GameObject | Grid의 자식으로 타일맵 구조를 구성하는데 사용한다. |
Grid | GameObject | 모든 Tilemap이 위치하는 기본 격자이다. |
Tilemap Renderer | Component | Tilemap의 모양을 실제로 그리는 역할을 한다. |
Tilemap Collider 2D | Component | 타일맵과 상호작용을 할 수 있도록 기능한다. |
Tile Assets | Asset | 개별 타일의 모양과 동작을 정의한다. |
Tilemap 만들기
Tilemap GameObject 만들기

Tilemap 오브젝트를 생성하면 씬 뷰의 모습이 바뀐다.

Tile Palette 설정
보통은 Inspector가 있는 창에 같이 넣어놓는다고 한다.
팔레트 창을 켜보면 현재는 유효한 팔레트가 없기 때문에 뜨는 것이 없다.
따라서 이러한 팔레트를 직접 만들어보자.

팔레트를 어디에 저장할건지 상자가 뜨게 되는데, 경로 역시 지정해주자.
나는 Artwork/Level
폴더를 만들어서 저장해주었다.
이제 타일을 넣어줘야 하는데, 나는 해당 에셋을 사용하였다.


해당 에셋 기준으로
floor_1
부터 floor_8
까지를 사용해보자.
이걸 전부 Tile Palette의 공간에 넣어주자.

역시 타일들을 생성할 폴더의 위치를 물어보는 상자가 뜬다.
나는 Artwork/Level
안에 또 Tiles
라는 폴더를 만들어 저장하였다.
저장까지 마치고 나면, 해당 스프라이트로 타일이 생성된 것을 Project 탭에서 파일로 확인할 수도 있고, Tile Palette 상에서도 확인할 수 있다.
같은 방법으로 wall 카테고리의 스프라이트들(wall_banner_blue
~ wall_top_right
)을
Tile Palette에 전부 추가시켜주자.

이제 타일맵 설정은 완료이다.
이제 타일을 그려줄 차례이다.
타일 그리기
이제 타일 팔레트의 타일들 중 하나를 골라서 씬에 배치만 하면 된다.

잘못 배치해서 없애고 싶으면 Shift + 클릭
을 하면 된다.

꾸민 타일들은 씬뷰와 게임뷰에서 바로 확인이 가능하다.
지금까지의 방법을 응용하여
Tilemap 오브젝트를 두 개 더 만들자.
이름은 BackDesign과 ForeDesign으로 짓겠다.
그리고 타일 팔레트를 이용하여 다음과 같이 배치해주자.


참고로 저렇게 특정 Tilemap 오브젝트의 타일들만 따로 보는 방법을 궁금해 할 수 있다.
씬뷰 오른쪽 아래 Tilemap Focus를 Tilemap으로 바꿔주면 해당 Tilemap 오브젝트를 선택했을 때 그 오브젝트의 타일들만 보이게 된다.

타일에 충돌설정 추가하기
이렇게 만든 타일 중 벽들은 캐릭터가 통과하면 안되기 때문에, 일부 타일은 충돌과 관련해서 기능을 구현해줘야 한다.
Tilemap 오브젝트를 한 개 더 생성해서 (이름은 Collision으로) 다음과 같이 그려주자.

이제 Collision
Tilemap에 Tilemap Collider 2D
라는 컴포넌트를 추가해주자.
이제 캐릭터가 가까이 가면 벽에 막힐 것이다.
참고로 충돌 구현을 위해서는
플레이어 캐릭터 오브젝트에 Rigidbody 2D
와 Box Collider
가 있어야 하니
잊지말고 추가해주자.

타일맵과 오브젝트의 스프라이트 순서 지정
그런데 아직 문제가 하나 있다.
앞쪽의 벽은 물리적으로 봤을 때 캐릭터보다 앞에 있기 때문에 캐릭터가 가려져야 하는데, 일반 바닥 타일처럼 위로 올라가버리는 모습을 확인할 수 있다.

이를 위해 Sprite의 순서를 지정해줘야 한다.
캐릭터 오브젝트는 Sprite Renderer
컴포넌트에서,
타일맵 오브젝트는 Tilemap Renderer
컴포넌트에서
해당 설정을 바꿔줄 수 있다.
Order in Layer
의 숫자는 정해진게 있는 것은 아니다.
더 앞에 그려져야만 하는 스프라이트의 Order in Layer
값을 높게만 해주면 되는 것이다.

Uploaded by N2T
'개발 > Unity 내일배움캠프 TIL' 카테고리의 다른 글
Unity 오브젝트 풀 (0) | 2023.09.08 |
---|---|
Unity2D 셀 애니메이션 (0) | 2023.09.07 |
Unity2D 플레이어 캐릭터 이동 구현하기 (0) | 2023.09.05 |
Unity MonoBehaviour (모노비헤이비어)와 스크립트 라이프 사이클 (1) | 2023.09.04 |
C# 패턴 일치 (Pattern Matching) (0) | 2023.09.01 |