Unity/2D

Unity 2D Tilemap Collsion 정보 추출

우대비 2022. 6. 28. 14:38
반응형

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