KenneyさんのとこのInput PromptsをUnityに読ませる
KenneyさんのとこのInput Prompts。
kenney.nlassets/input-promptsダウンロードすると、個別ファイル、フォント、SpriteAtlasと全ての便利な形式で入っている。
本当に頭があがらない。
Unityで使用するのであれば、SpriteAtlas形式のものが便利そうなので、こちらをUnityに読み込ませたい。
付属するxmlが何の形式か知らないけれど、これをインポートするためだけにでかいライブラリ入れるのも面倒なので
雑にパースしてSlice設定を行うスクリプトを書いた。
TextureAtlasXmlImporter.cs
using System.Collections.Generic;
using System.IO;
using System.Xml.Linq;
using UnityEditor;
using UnityEditor.U2D.Sprites;
using UnityEngine;
public static class TextureAtlasXmlImporter
{
private const string MenuPath = "Assets/Tools/Apply SpriteAtlas XML";
[MenuItem(MenuPath, true)]
private static bool Validate()
{
return Selection.activeObject is Texture2D;
}
[MenuItem(MenuPath, false)]
private static void Run()
{
var texture = Selection.activeObject as Texture2D;
if (texture == null)
{
Debug.Log("Error: No texture selected");
return;
}
var xmlPath = EditorUtility.OpenFilePanel("Select SpriteAtlas XML", Application.dataPath, "xml");
if (string.IsNullOrEmpty(xmlPath))
{
Debug.Log("Error: No XML file selected");
return;
}
if (!File.Exists(xmlPath))
{
Debug.Log($"Error: XML file does not exist: {xmlPath}");
return;
}
var xmlDocument = XDocument.Load(xmlPath);
var spriteRects = new List<SpriteRect>();
var spriteNameFileIdPairs = new List<SpriteNameFileIdPair>();
foreach (var e in xmlDocument.Descendants("SubTexture"))
{
var name = (string)e.Attribute("name");
var x = (int)e.Attribute("x");
var y = (int)e.Attribute("y");
var width = (int)e.Attribute("width");
var height = (int)e.Attribute("height");
var spriteID = GUID.Generate();
spriteRects.Add(new SpriteRect
{
name = name,
rect = new Rect(x, y, width, height),
alignment = (int)SpriteAlignment.Center,
pivot = new Vector2(0.5f, 0.5f),
spriteID = spriteID
});
spriteNameFileIdPairs.Add(new SpriteNameFileIdPair(name, spriteID));
}
var factory = new SpriteDataProviderFactories();
factory.Init();
var dataProvider = factory.GetSpriteEditorDataProviderFromObject(texture);
dataProvider.InitSpriteEditorDataProvider();
dataProvider.SetSpriteRects(spriteRects.ToArray());
var nameFileIdDataProvider = dataProvider.GetDataProvider<ISpriteNameFileIdDataProvider>();
nameFileIdDataProvider.SetNameFileIdPairs(spriteNameFileIdPairs);
dataProvider.Apply();
var assetImporter = (AssetImporter)dataProvider.targetObject;
assetImporter.SaveAndReimport();
Debug.Log($"SpriteAtlas XML applied successfully. Imported {spriteRects.Count} sprites.");
}
}まずは画像をUnityにインポートして、右クリック > Tools > Apply SpriteAtlas XMLを選択するとこの通り。
