기록은 기억을 이기고 시간보다 오래 남는다.

게임 개발/Unity

[Unity] Map tool

준_준 2024. 5. 29. 14:44

유니티 상당 바에 tools 추가 

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

#if UNITY_EDITOR
using UnityEditor;
#endif 

public class MapEditor
{
#if UNITY_EDITOR
    [MenuItem("Tools/GenerateMap")]
    private static void HelloWorld()
    {
        if (EditorUtility.DisplayDialog("Hello World", "Create?", "Create", "Cancel"))
        {
            new GameObject("Hello Wolrd");
        }
    }
#endif
}

이러면 메뉴에 Tools가 추가 되고 거기에 GenerateMap를 클릭하면 Hello World라는 게임 오브젝트를 만들건지 물어본다.

 

여기에 단축키를 추가 하고 싶으면 

단축키의 약자는 다음과 같다.  %(Ctrl), #(Shift) &(Alt) 

 

아래의 코드를

 [MenuItem("Tools/GenerateMap")]  ==>   [MenuItem("Tools/GenerateMap %#g")] 

다음과 같이 바꾸면 된다.

 

위 코드는 ctrl + shift + g이다.

 

 

    foreach (GameObject go in gameObjects)
        {
            Tilemap tm = Util.FindChild<Tilemap>(go, "Tilemap_Collision", true);
            /*if (tm == null)
                return;*/
            
            using (var writer = File.CreateText($"Assets/Resource/Map/{go.name}.txt"))
            {
                writer.WriteLine(tm.cellBounds.xMin);
                writer.WriteLine(tm.cellBounds.xMax);
                writer.WriteLine(tm.cellBounds.yMin);
                writer.WriteLine(tm.cellBounds.yMax);

                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();
                }

            }
        }

위에 코드는 타일맵이 있으면 0 1 파일을 만들어주는건데 내 파일에서는 만들어지지는 않는다.

반응형