コガネブログ

平日更新を目標にUnityやC#、Visual Studioなどのゲーム開発アレコレを書いていきます

【Unity】【uGUI】SpriteAtlas がインポートされた時に Tight Packing をオフにするエディタ拡張

この記事における Unity のバージョン

Unity 2017.1.1 f1

はじめに

f:id:baba_s:20170915105306p:plain

SpriteAtlas がインポートされたら自動で Tight Packing をオフにしようと思って
いろいろ調べていたのですが、どうも現在の Unity のバージョンでは
SpriteAtlas 用のインポータークラスが存在しないみたいだったので
SerializedObject を使用して自作しました

ソースコード

using System.Linq;
using UnityEditor;
using UnityEngine.U2D;

public sealed class SpriteAtlasPostprocessor : AssetPostprocessor
{
    private static void OnPostprocessAllAssets 
    (
        string[] importedAssets , 
        string[] deletedAssets  , 
        string[] movedAssets    , 
        string[] movedFromPath
    )
    {
        var list = importedAssets
            .Where( c => c.EndsWith( ".spriteatlas" ) )
            .ToArray()
        ;
        
        for ( int i = 0; i < list.Length; i++ )
        {
            var path    = list[ i ];
            var atlas   = AssetDatabase.LoadAssetAtPath<SpriteAtlas>( path );
            var so      = new SerializedObject( atlas );
            var p       = so
                .FindProperty( "m_EditorData" )
                .FindPropertyRelative( "packingParameters" )
                .FindPropertyRelative( "enableTightPacking" )
            ;
            p.boolValue = false;
            so.ApplyModifiedProperties();
        }
    }
}