うにてぃブログ

主にUnityとC#に関する記事を書いていきます

【Unity】Texture2DArray を作成するツール

テスト用の シンプルな Texture2DArray を作成するためのツール

using UnityEditor;
using UnityEngine;

public class CreateTexture2DArrayEditor : EditorWindow
{
    [MenuItem("Tools/CreateTexture2DArray")]
    private static void ShowWindow()
    {
        var window = GetWindow<CreateTexture2DArrayEditor>();
        window.titleContent = new GUIContent(nameof(CreateTexture2DArrayEditor));
        window.Show();
    }

    private int _size = 32;
    
    [SerializeField]
    private Color[] _colors = new Color[0];

    private void OnGUI()
    {
        _size = EditorGUILayout.IntField("Size", _size);
        
        using (new EditorGUILayout.HorizontalScope())
        {
            if (GUILayout.Button("Reset"))
            {
                _colors = new Color[0];
            }
            if (GUILayout.Button("Add"))
            {
                ArrayUtility.Add(ref _colors, Color.white);
            }
        }

        for (int i = 0; i < _colors.Length; i++)
        {
            _colors[i] = EditorGUILayout.ColorField($"{i}", _colors[i]);
        }

        using (new EditorGUI.DisabledScope(_colors.Length <= 0))
        {
            if (GUILayout.Button("Create"))
            {
                Create(_size, _colors);
            }
        }
    }

    private void Create(int size, Color[] colors)
    {
        var asset = new Texture2DArray(size, size, colors.Length, TextureFormat.RGB24, false, false);

        for (var i = 0; i < colors.Length; i++)
        {
            var c = new Color[size * size];
            for (var j = 0; j < size * size; j++)
            {
                c[j] = colors[i];
            }
            asset.SetPixels(c, i);
        }
        
        asset.Apply();

        var path = "Assets/Color.asset";
        
        AssetDatabase.CreateAsset(asset, path);
    }
}