인프런 커뮤니티 질문&답변

박준영님의 프로필 이미지
박준영

작성한 질문수

[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part7: MMO 컨텐츠 구현 (Unity + C# 서버 연동 기초)

MapTool

Tilemap.cellBounds에 관련해서 질문 있습니다.

작성

·

886

·

수정됨

0

제가 Tilemap을 아래와 같이 만들어 놨는데요,Tile.pngcellBounds에 break point를 잡아서 디버깅을 해보니 x.Max = 20, y.Max = 9가 나오더라구요. (제가 찍은 tilemap을 일일히 하나하나 세보니 x의 최대 좌표는 19고 y는 8인데도 말이죠.)cellBounds.png그렇다면 위 코드와 같이 반복문을 돌면 타일이 찍혀있지 않는 y = 9, x = 20 일 때도 반복문을 도니까 제가 만든 맵보다 가로 세로가 한 줄씩 늘어나게 출력됩니다. (아래 사진처럼 맨 윗줄과 오른쪽 줄에 0이 출력되서 나옵니다.)map.PNG

제가 생각하기에는 아래와 같이 코드를 짜야 알맞은xMin, xMax, yMin, yMax값과 map이 출력될 거 같은데 혹시 제가 틀린건가요?

using (var writer = File.CreateText($"Assets/Resources/Map/{go.name}.txt"))
{
	writer.WriteLine(tmBase.cellBounds.xMin);
	writer.WriteLine(tmBase.cellBounds.xMax - 1);
	writer.WriteLine(tmBase.cellBounds.yMin);
	writer.WriteLine(tmBase.cellBounds.yMax - 1);

	for (int y = tmBase.cellBounds.yMax - 1; y >= tmBase.cellBounds.yMin; y--)
	{
		for (int x = tmBase.cellBounds.xMin; x < tmBase.cellBounds.xMax; x++)
		{
			TileBase tile = tm.GetTile(new Vector3Int(x, y, 0));
			if (tile != null)
				writer.Write("1");
			else
				writer.Write("0");
		}
		writer.WriteLine();
	}
}

답변 3

1

https://forum.unity.com/threads/tilemap-compressbounds.859426/

여기서 해답 얻으실수 있습니다 :)

직관적이지 못해서 찾기 많이 어려우실거에요

감사합니다 같은 문제 겪어서 찾아봤는데 덕분에 해결했네요

1

Rookiss님의 프로필 이미지
Rookiss
지식공유자

유니티 툴 이슈 같은데 이미 칠한 부분을 삭제해도 저렇게 한줄/한칸이 남더라고요.
옵션중에 다시 컴팩트하게 있는 부분만으로 사이즈를 줄이는 기능이 있던 것 같은데
너무 오래 돼서 기억이 안 나네요. 일단 수동으로 맵을 고치시거나
코드에서 임시 처리를 해보시기 바랍니다. 아마 강의에서의 맵은 빈 줄/칸이 없을거에요.

0

유니티 메뉴얼에 정확한 설명이 없어서 저도 구글링 계속 해봤는데 아무래도 xMin, yMin은 inclusive, xMax, yMax는 exclusive가 맞는 것 같습니다.

박준영님의 프로필 이미지
박준영

작성한 질문수

질문하기