2D 타일맵

심지태
∙∙조회 16
2D 타일맵

타일맵

팔레트에 물감을 짜고 도화지에 그림을 그리듯,
Tile Palette에 타일을 등록하고 Scene에 배치해 맵을 만듭니다.
같은 타일을 반복해서 사용하므로 넓은 맵도 쉽게 만들 수 있습니다.
필요하면 Tilemap Collider 2D로 벽과 바닥에 충돌을 설정합니다.

사용 방법

  1. 타일맵 스프라이트 준비
  2. Window->2d->Tile Palette
  3. 새로운 팔레트 만들고 이름 설정
  4. 만든 팔레트에 드래그 & 드롭으로 스프라이트 적용
  5. 하이어라키에 Create->2D Object -> Tilemap -> Rectangular로 타일맵 오브젝트 생성
  6. 물감을 선택하고 팔레트에 그리듯이 타일맵 오브젝트에 그리면 됨
  7. Collider 추가로 벽/바닥으로 쓸 수 있음. Tilemap Collider 2D : 타일맵에 콜라이더를 설정할 수 있음
    Composite Collider 2D : Tilemap Collider 2D만 추가하면, 플레이어가 맵에 끼는 현상이 자주 생김. 끼지 않고 매끄럽게 플레이되도록 해주는 컴포넌트(Composite Collider 2D를 추가하면 자동으로 Rigidbody 2D가 추가됨)

타일맵 크기 설정 방법

타일맵 스프라이트의 Open Sprite Editor 에서 타일의 가로/세로 길이를 확인하고,

타일맵 스프라이트의 인스펙터에서 Pixels Per Unit을 타일의 가로/세로 로 설정한다.

타일맵 오브젝트 한 칸에 딱 맞게 들어가는 모습

2D 오브젝트에 Physics Material 2D 설정해주기

2D 오브젝트의 Rigidbody 2D에 Material에 Physics Material 2D를 설정할 수 있다.

Friction

표면의 마찰 계수입니다.

  • 값이 낮을수록 미끄럽습니다.
  • 값이 높을수록 움직임을 더 강하게 방해합니다.

Bounciness

충돌했을 때 얼마나 튕겨 나가는지를 설정합니다.

  • 0: 전혀 튕기지 않습니다.
  • 1: 에너지 손실 없이 완전히 튕기는 값입니다.

Friction Combine

두 Collider에 서로 다른 마찰값이 설정되어 있을 때, 두 마찰값을 어떤 방식으로 합칠지 정합니다.

현재 Mean은 두 값의 기하평균을 사용합니다.

예를 들어 다음 두 물체가 충돌한다면:

plain text
플레이어 마찰력: 0.4
벽 마찰력: 0.9

Mean의 계산은 다음과 같습니다.

scss
√(0.4 × 0.9) = 0.6

따라서 실제 충돌에 적용되는 마찰값은 0.6 정도가 됩니다.

Bounce Combine

두 Collider에 서로 다른 Bounciness가 있을 때, 실제 튕김 값을 어떤 방식으로 결정할지 정합니다.

현재 Maximum은 두 값 중에서 더 큰 값을 사용합니다. 한쪽 물체라도 잘 튀는 재질이면 높은 튕김 값이 적용됩니다.

Platform Effector 2D

Platform Effector 2D는 한쪽 방향으로만 충돌하는 발판을 만들 때 사용하는 컴포넌트입니다. 캐릭터가 발판 아래에서 위로 점프할 때는 발판을 통과할 수 있지만, 발판 위에서 아래로 떨어질 때는 통과하지 못하고 발판 위에 착지하게 만들 수 있습니다.

Unity에서는 이러한 방식을 One Way Collision, 단방향 충돌이라고 합니다.

만드는 방법

발판 오브젝트에 다음 컴포넌트를 추가합니다.

plain text
Platform
├─ SpriteRenderer
├─ BoxCollider2D
└─ PlatformEffector2D

BoxCollider2D는 다음처럼 설정합니다.

vbnet
Is Trigger: 해제
Used By Effector: 체크

Is Trigger를 켜면 물리적인 충돌을 하지 않으므로 해제해야 합니다. Used By Effector를 체크하면 해당 Collider가 같은 오브젝트에 붙은 Platform Effector 2D의 영향을 받습니다.

Platform Effector 2D는 다음처럼 설정합니다.

yaml
Use One Way: 체크
Surface Arc: 180