반응형
※ isometric 타일맵을 기준으로 작성된 포스팅입니다.
타일맵 컴포넌트에서 타일을 그리면 그려진 타일의 배열의 크기를 가져올 수 있다. isometric 기준으로 타일맵의 배열은 다음과 같이 구성된다.
주의할 점이 있는데 타일맵 자체에서 배열을 제공하는것이 아니라 타일맵이 그려진 사이즈(Vector2) 값을 가지고있는것이기 때문에 타일맵의 사이즈 값과 타일맵의 셀 바운드값을 가져와서 직접 배열을 초기화해줘야한다.
이 때, 셀 바운드값은 최하단 타일을 기준으로 값이 정해지기 때문에 이 값이 무조건 0에서부터 시작하지 않는다.
- 타일맵 초기화 코드
private void InitTileArray()
{
Tilemap tilemap = GetComponent<Tilemap>();
Vector2[,] tileArray = new Vector2[m_cTilemap.size.y, m_cTilemap.size.x];
Vector3Int tilePos;
for (int y = tilemap.cellBounds.yMin; y < tilemap.cellBounds.yMax; y++)
{
for (int x = tilemap.cellBounds.xMin; x < tilemap.cellBounds.xMax; x++)
{
tilePos = new Vector3Int(x, y, 0);
if (tilemap.HasTile(tilePos))
{
int arrX = x - tilemap.cellBounds.xMin;
int arrY = y - tilemap.cellBounds.yMin;
Vector3 tileWorldPos = tilemap.CellToWorld(tilePos);
tileArray[arrY, arrX] = tileWorldPos;
}
}
}
}
※ tileWorldPos의 값은 타일의 중앙좌표가 아닌 하단 모서리의 좌표이기 때문에, 중앙좌표를 위한 추가값을 넣어줘야한다.
- 추가 주의사항
- 특정 위치에 타일맵을 한번 그리게되면 그 위치의 타일맵을 지운다고해도 그 위치는 바운드값에 포함이 된다. 그렇기때문에 타일맵 컴포넌트에서 옵션(…)을 눌러서 'Compress Tilemap Bounds'를 눌러주거나 코드에 CompressBounds()를 호출해준다.
반응형
'Develoment > Unity' 카테고리의 다른 글
[유니티] Generic singleton(제네릭 싱글톤) 클래스 제작 (0) | 2022.01.26 |
---|---|
[유니티] JsonUtility (0) | 2022.01.25 |
유니티 스크립트 한글 깨짐현상 해결하기 (0) | 2021.11.12 |
[유니티] UGUI 파티클을 사용하면서 배치를 줄여보자. (1) | 2021.07.26 |
[유니티] 타일맵 팔레트 단축키 모음 (0) | 2021.06.23 |