この記事における Unity のバージョン
- Unity 2017.1.1f1
- Unity 2018.3.9f1
はじめに
SpriteAtlas がインポートされたら自動で Tight Packing をオフにしようと思って
いろいろ調べていたのですが、どうも現在の Unity のバージョンでは
SpriteAtlas 用のインポータークラスが存在しないみたいだったので
SerializedObject を使用して自作しました
ソースコード
Unity 2018 版
using System.Linq; using UnityEditor; using UnityEngine.U2D; /// <summary> /// SpriteAtlas の設定を自動で変更するクラス /// </summary> public sealed class SpriteAtlasPostprocessor : AssetPostprocessor { //============================================================================== // 関数 //============================================================================== /// <summary> /// SpriteAtlas がインポートされた時に呼び出されます /// </summary> private static void OnPostprocessAllAssets ( string[] importedAssets , string[] deletedAssets , string[] movedAssets , string[] movedFromPath ) { var list = importedAssets .Where( c => c.EndsWith( ".spriteatlas" ) ) .ToArray() ; if ( list == null || list.Length <= 0 ) return; 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( "packingSettings" ) .FindPropertyRelative( "enableTightPacking" ) ; p.boolValue = false; so.ApplyModifiedProperties(); } } }
Unity 2017 版
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(); } } }