이렇게 묶음으로 된 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");
}
}
반응형
'Unity 공부 기록' 카테고리의 다른 글
[Unity/유니티] Pivot(피봇) 재설정 하기 (1) | 2024.09.07 |
---|---|
[유니티/Unity] Physics2D.OverlapCircle 중앙 정렬 (0) | 2024.09.06 |
[유니티/Unity] Aseprite 사용법 (0) | 2024.09.04 |
댓글