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を選択するとこの通り。