この記事でのバージョン
Unity 5.3.4f1 Personal
はじめに
OnPreprocessTextureはテクスチャがインポートされた時に実行され、
何かしらの処理を自動で行えるメソッドです。
同じようなものにOnPreprocessAudio、OnPreprocessModelがあります。
using UnityEngine; using UnityEditor; //AssetPostprocessorを継承する必要あり public sealed class TexturePostprocessor : AssetPostprocessor{ //Textureファイルのインポート設定 Textureファイルがインポートされる直前に呼び出される private void OnPreprocessTexture (){ //インポート時のTextureファイルを設定するクラス TextureImporter textureImporter = assetImporter as TextureImporter; //インポートされたテクスチャのタイプをSpriteにしたりとか出来る textureImporter.textureType = TextureImporterType.Sprite; } }
これは非常に便利なのですが、インポート時に実行されるメソッドなため、
ディレクトリを移動した時には実行されません。
インポート時のみの設定であればこれで十分なのですが、
例えば、ディレクトリ毎にテクスチャの設定を変えたい、
なんて場合にはディレクトリを移動した時にもTextureImporterを実行して欲しくなります。
今回はそんな時に使える方法のご紹介です。
OnPostprocessAllAssets
今回使うのがOnPostprocessAllAssetsというメソッドです。
これはファイルがインポートされた時、削除された時、編集された時、移動した時と、
とにかく何らかの変更があった時に呼ばれるメソッドです。
これを利用して、ファイルが移動した時にそのファイルを再度インポートすれば、
ファイルが移動した時でもOnPreprocessTextureが呼ばれるようにできます。
例えば以下のような感じです。
using UnityEngine; using UnityEditor; //AssetPostprocessorを継承する必要あり public sealed class TexturePostprocessor : AssetPostprocessor{ //ファイルに何らかの変更があった時に呼ばれる private static void OnPostprocessAllAssets (string[] importedAssets, string[] deletedAssets, string[] movedAssets, string[] movedFromAssetPaths){ //移動したアセット、全てのパスを回す foreach (string path in movedAssets) { //再度インポート AssetDatabase.ImportAsset (path, ImportAssetOptions.ForceUpdate); } } }
上記の例ではファイルが移動する度にインポートが発生してしまい、
さすがに煩わしいので、対象のディレクトリを指定し、
ついでにディレクトリによってフォーマットを自動で変えると以下のような感じに。
んで、これをEditorディレクトリに入れて置くとこうなる。
設定ミスが無くなりそうでいい感じ!
まぁ、ディレクトリ入れ間違ってたら意味ないですけどね!
おわりに
書いといてなんなんですが、最初からインポート時も移動時も
OnPostprocessAllAssetsで処理すればいい気がしてきました(:3っ)∋〜