【Unity】【エディタ拡張】Assetが生成された時にだけ処理を行う

Assetが生成された時にだけ処理を行う方法です。
AssetPostprocessorのタイミングで処理を行いたいものの、
リインポートや移動のときには処理をスキップしたい場合に使えます。

Unity2018.2.17

ソースコード

早速ですがソースコードです。

public class ExampleAssetPostprocessor : AssetPostprocessor 
{
    private void OnPreprocessAsset()
    {
        var guid = AssetDatabase.AssetPathToGUID(assetPath);
        var asset = AssetDatabase.LoadAssetAtPath<Object>(assetPath);

        // Assetがまだ生成されていなかったら新規作成とみなす
        if (!string.IsNullOrEmpty(guid) && asset == null) {
            // 新規生成時の処理
            
            // インポート中にやったらいけない処理は遅延させる
            EditorApplication.delayCall = () => 
            {
            }
        }
    }   
}

AssetPostprocessor.OnPreprocessAsset()時点でAssetをロードすると、
既にAssetが存在する場合には正常に取得できますが初回作成時にはnullが入ってきます。

light11.hatenadiary.com

これを利用して、Assetがロードできなかったら初回作成であるとみなしています。

関連

light11.hatenadiary.com