[Unity] Grid 컴포넌트

식혜드식혜·2025년 5월 13일

Unity

목록 보기
6/6


Untiy에서 Grid 컴포넌트는 셀(Cell) 기반의 구조를 만들어서, Tilemap이나 다른 셀 단위 시스템이 객체를 배치하거나 관리할 수 있게 해주는 역할을 한다. 이 셀(Cell)은 정사각형, 육각형 또는 등각 뷰(iso)로 구성될 수 있고, 이 구조는 월드 공간(World Space) 안에서의 위치 계산에 영향을 준다.

Grid의 셀 기준 좌표

Grid에서의 셀 좌표(Cell Position)은 정수값(Vector3Int)로 표현되며, 이는 셀의 상대적인 위치를 의미한다.
예를 들어 (0, 0, 0)좌표는 Grid의 중심 셀이고, (1, 0, 0)은 그 오른쪽 셀을 의미한다. Z 값은 대부분 0으로 두며, 동일 위치의 다른 타일 레이어 또는 타일 쌓기(stack) 등에 사용될 수 있다.

셀 -> 월드 위치 변환

  • Grid는 셀 좌표를 월드 공간 좌표로 변환할 수 있다.
    즉, (0, 0, 0) 셀은 Grid의 Transform 위치와 정렬되어 있고, (1, 0, 0)은 그 오른쪽에 한 칸 이동한 셀이다.
  • 각 셀의 실제 크기는 Grid 컴포넌트의 Cell Size 값에 따라 달라진다 (기본값은 1, 1, 1)

셀 레이아웃(Cell Layout)

Grid에는 셀의 형태를 정의하는 Cell Layout 옵션이 있다.

  • Rectangle: 일반적인 사각형 타일(2D 게임에서 가장 흔함)
  • Hexagon: 육각형 타일(벌집 구조나 전략 게임)
  • Isometric: 등각 뷰 타일(쿼터뷰 스타일)
  • Isometric Z As Y: Z축을 Y로 해석해 타일을 위로 쌓을 수 있음
    각 셀 레이아웃은 셀 간 배치 방식과 모양에 영향을 준다.

셀 사이즈(Cell Size)

이건 말 그대로 각 셀의 월드 상 크기이다.
기본은 (1, 1, 1)이고, 만약 타일 하나가 더 크거나 작게 보이도록 하려면 이 값을 조정하면 된다.

셀 간격(Cell Gap)

  • 타일 사이에 얼마나 간격을 둘 것인지를 설정하는 속성
    셀 크기 보다 절대값이 큰 음수를 입력하면 Unity는 셀 크기에 맞춰 절댓값을 자동으로 변경한다.
    예를 들어, 셀 크기가 (1, 1, 0)이고 셀 간격이 (-2, -2, 0)으로 설정된 경우, 에디터는 셀 간격 값을 (-1, -1, 0)으로 자동 변경한다.
  • 기본값은 (0,0,0)이다. 즉, 셀과 셀 사이에 간격이 없이 붙어 있다.
  • 타일이 겹치거나 너무 빽빽해 보일 때, 이 값을 이용해 간격을 조절할 수 있다.

Cell Sizzle

셀 좌표의 축을 변경하거나 뒤집는 기능

  • Siwzzle은 셀 좌표의 X, Y, Z 순서를 바꾸거나 반전시켜서 Tilemap이 셀 좌표를 다르게 해석하게 만든다.
옵션설명
XYZ (기본값)X = X, Y = Y, Z = Z (기본 상태)
XZYX = X, Z = Y, Y = Z (Y와 Z 축을 바꿈)
YZXY = X, Z = Y, X = Z
ZYXZ = X, Y = Y, X = Z
ZXYZ = X, X = Y, Y = Z
YXZY = X, X = Y, Z = Z
XZY_NEG, XYZ_NEG축을 뒤집은 버전 (예: -X, -Y, -Z)

사용하는 이유

이건 주로 비정형 좌표계나 특수한 그리드 설정이 필요할 때 사용합니다:

  • 3D 게임에서 z축 방향으로 타일을 쌓을 때
  • 타일맵이 특정 방향으로 정렬되어 있어야 할 때
  • 좌표계를 변형시켜서 다른 계산 방식과 맞출 때

일반적인 2D 게임에서는 대부분 XYZ 그대로 쓰지만,
3D 환경 또는 특수한 정렬 구조를 만들고 싶을 때 아주 유용해요.

타일맵 위치 계산 시 주의할 점:

  • Tilemap.WorldToCell(worldPosition): 월드 좌표를 셀 좌표로 변환
  • Tilemap.CellToWorld(cellPosition): 셀 좌표를 월드 좌표로 변환
    주의: 이때 변환되는 위치는 타일의 기준점(Pivot)이 아닌 셀 기준 좌표이다. 따라서 타일의 실제 중심에 뭔가를 배치하려면, Offset값을 고려해야 한다.
profile
안녕하세요! 유니티 공부 중인 고3 학생입니다

0개의 댓글