Unity AssetPostprocessorを使ってインポート時にテクスチャを分割してみる
参考 https://anchan828.github.io/editor-manual/web/assetpostprocessor.html
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEditor; using UnityEditorInternal; using System.IO; public class SpriteAssetPostprocessor : AssetPostprocessor { private static readonly string SpritePath = "Assets/Sprites/"; #if true private bool IsMatchPath { get { return assetPath.StartsWith(SpritePath); } } #else private bool IsMatchPath { get { return false; } } #endif void OnPreprocessTexture() { if (!IsMatchPath) { return; } var importer = assetImporter as TextureImporter; importer.textureType = TextureImporterType.Sprite; importer.spriteImportMode = SpriteImportMode.Multiple; importer.filterMode = FilterMode.Point; } void OnPostprocessTexture(Texture2D texture) { if (!IsMatchPath) { return; } var importer = assetImporter as TextureImporter; var offset = Vector2.zero; var size = new Vector2(32, 32); var padding = Vector2.zero; var rects = InternalSpriteUtility.GenerateGridSpriteRectangles(texture, offset, size, padding); var fileName = Path.GetFileNameWithoutExtension(assetPath); var meta = new List<SpriteMetaData>(); var i = 0; foreach (var rect in rects) { meta.Add(new SpriteMetaData { name = string.Format("{0}_{1}", fileName, i), rect = rect }); ++i; } importer.spritesheet = meta.ToArray(); // 下記を追加しないと更新されなかったので... // https://anapest.digital/assetpostprocessor-default-options-unity/ var asset = AssetDatabase.LoadAssetAtPath<Texture2D>(importer.assetPath); if (asset) { EditorUtility.SetDirty(asset); } else { importer.SaveAndReimport(); } } }