Unity 공부 기록

[유니티/Unity] Slice된 Texture2D를 Png 썸네일 이미지로 생성하는 툴

테크러너 2024. 9. 3.

이렇게 묶음으로 된 Texture2D를 Slice 한 후 원하는 이미지 하나를 썸네일로 사용하고 싶었는데 방법을 몰랐다.

그래서 그냥 툴을 만들어버렸다.

 

위의 Texture2D 파일을 드래그 앤 드롭해서 끌어다 넣고, 썸네일을 추출할 저장 경로를 지정해준 후 `Export Sprites`를 클릭하면 된다.

 

폴더에 들어가보면 이렇게 Png 파일들이 추출되어 있다.

이 중에서 원하는 이미지를 골라서 썸네일로 활용하면 된다!

 

 

소스코드▼

using System.IO;
using System.Linq;
using UnityEditor;
using UnityEngine;

public class SpritePngExporter : EditorWindow
{
    private Texture2D texture2D;
    private string outputFolderPath = "Assets/06.Downloads/00.Using/Sprites/Thumbnail";

    [MenuItem("Tools/Sprite Exporter")]
    public static void ShowWindow()
    {
        SpritePngExporter window = GetWindow<SpritePngExporter>("Sprite Exporter");
        // 중앙에 배치
        Vector2 windowSize = new Vector2(600, 200);
        Rect mainWindowRect = EditorGUIUtility.GetMainWindowPosition();
        window.position = new Rect(
            mainWindowRect.x + (mainWindowRect.width - windowSize.x) / 2,
            mainWindowRect.y + (mainWindowRect.height - windowSize.y) / 2,
            windowSize.x, windowSize.y
        );
    }

    void OnGUI()
    {
        GUILayout.Label("Sprite Exporter", EditorStyles.boldLabel);

        texture2D = (Texture2D)EditorGUILayout.ObjectField("Texture2D", texture2D, typeof(Texture2D), false);
        outputFolderPath = EditorGUILayout.TextField("Output Folder Path", outputFolderPath);

        if (GUILayout.Button("Export Sprites"))
        {
            ExportSpritesToPNG();
        }
    }

    void ExportSpritesToPNG()
    {
        if (texture2D == null)
        {
            EditorUtility.DisplayDialog("Error", "Please assign a Texture2D.", "OK");
            return;
        }

        Sprite[] sprites = AssetDatabase.LoadAllAssetRepresentationsAtPath(AssetDatabase.GetAssetPath(texture2D)).OfType<Sprite>().ToArray();

        if (!Directory.Exists(outputFolderPath))
        {
            Directory.CreateDirectory(outputFolderPath);
        }

        foreach (Sprite sprite in sprites)
        {
            Texture2D spriteTexture = new Texture2D((int)sprite.rect.width, (int)sprite.rect.height);
            Color[] pixels = sprite.texture.GetPixels((int)sprite.rect.x, (int)sprite.rect.y, (int)sprite.rect.width, (int)sprite.rect.height);
            spriteTexture.SetPixels(pixels);
            spriteTexture.Apply();

            byte[] pngData = spriteTexture.EncodeToPNG();
            if (pngData != null)
            {
                string filePath = Path.Combine(outputFolderPath, sprite.name + ".png");
                File.WriteAllBytes(filePath, pngData);
                //Debug.Log("Saved: " + filePath);
            }
        }

        AssetDatabase.Refresh();
        EditorUtility.DisplayDialog("Success", "Sprites exported successfully.", "OK");
    }
}
반응형

댓글