반응형
Collision은 Unity내의 Component를 이용하지 않고 갈수있는 Tile과
그렇지 않은타일을 구분하는 Tilemap을 하나 만들어서 관리함
Prefabs/Map 폴더 안의 모든 Prefab들을 GameObject[ ] 에 넣고 하나하나 tilemap을 추출함
public class MapEditor : MonoBehaviour
{
#if UNITY_EDITOR
// 단축키 설정 % Ctrl, # Shift, & ALT
[MenuItem("Tools/GenerateMap %#g")]
private static void GenerateMap()
{
GameObject[] gameObjects = Resources.LoadAll<GameObject>("Prefabs/Map");
foreach (GameObject go in gameObjects)
{
Tilemap tm = Util.FindChild<Tilemap>(go, "Tilemap_Collision", true);
tilemap의 각 모서리 좌표를 가져옴
using (var writer = File.CreateText($"Assets/Resources/Map/{go.name}.txt"))
{
writer.WriteLine(tm.cellBounds.xMin);
writer.WriteLine(tm.cellBounds.xMax);
writer.WriteLine(tm.cellBounds.yMin);
writer.WriteLine(tm.cellBounds.yMax);
갈수 없는 곳에 Tile을 깔아두었기에
tile이 있으면 1 없으면 0으로 표시되게 했음
for (int y = tm.cellBounds.yMax; y >= tm.cellBounds.yMin; y--)
{
for (int x = tm.cellBounds.xMin; x <= tm.cellBounds.xMax; x++)
{
TileBase tile = tm.GetTile(new Vector3Int(x, y, 0));
if (tile != null)
writer.Write("1");
else
writer.Write("0");
}
writer.WriteLine();
}
}
}
}
#endif
}
-10
10
0
9
000000000000000000000
000000000000011111110
000000000000011111110
100000000000011111110
000000000000011111110
000000000010011111110
000000000000011111110
000000000000011111110
000000000000000000000
000000000000000000000
이런게 나옴!
반응형
LIST
'Unity > 2D' 카테고리의 다른 글
Unity 2D Anim (0) | 2022.06.29 |
---|---|
Unity 2D Grid상의 좌표 (0) | 2022.06.28 |
Unity 2D tilemap Collision (0) | 2022.06.27 |
Unity 2D Tile Layer (0) | 2022.06.27 |
Unity 2D Tilemap (0) | 2022.06.27 |