【Unity】【エディタ】アセットが作成・削除・移動・保存される「前」のタイミングをフックするAssetModificationProcessor

Unityでアセットが作成・削除・移動・保存される前のタイミングをフックする方法です。

Unity2020.1.10

AssetModificationProcessor

アセットが作成・削除・移動・保存される前のタイミングをフックするにはUnityEditor.AssetModificationProcessorを使用します。

using UnityEditor;

class FooConfigProcessor : UnityEditor.AssetModificationProcessor
{
    // アセットを作成しようとしたときに呼ばれる
    // metaファイルの情報も入ってくる
    private static void OnWillCreateAsset(string assetName)
    {
    }

    // アセットを削除しようとしたときに呼ばれる(削除が成功するかどうかにかかわらず呼ばれる)
    // このメソッドの中でAssetDatabaseによる削除は行わないこと
    private static AssetDeleteResult OnWillDeleteAsset(string assetPath, RemoveAssetOptions options)
    {
        // 自身で削除を行った場合にはDidDeleteを返す
        //return AssetDeleteResult.DidDelete;

        // DidNotDeleteを返すとUnityのデフォルトの処理により削除が行われる
        return AssetDeleteResult.DidNotDelete;

        // 削除出来なかった場合にはFailedMoveを返す
        return AssetDeleteResult.FailedDelete;
    }

    // アセットを移動しようとしたときに呼ばれる(移動が成功するかどうかにかかわらず呼ばれる)
    // このメソッドの中でAssetDatabaseによる移動は行わないこと
    private static AssetMoveResult OnWillMoveAsset(string sourcePath, string destinationPath)
    {
        // 自身で移動を行った場合にはDidMoveを返す
        //return AssetMoveResult.DidMove;
        
        // DidNotMoveを返すとUnityのデフォルトの処理により移動が行われる
        return AssetMoveResult.DidNotMove;

        // 移動出来なかった場合にはFailedMoveを返す
        //return AssetMoveResult.FailedMove;
    }
    
    // アセットの変更をディスクに書き込む前のタイミングで呼ばれる
    private static string[] OnWillSaveAssets(string[] paths)
    {
        // 書き込むファイルのみを返却する
        return paths;
    }
}

作成・削除・移動の後処理を記述するにはAssetPostprocessor

関連して、 作成・削除・移動の後処理を記述するにはAssetPostprocessorを使います。

light11.hatenadiary.com

関連

light11.hatenadiary.com

参考

docs.unity3d.com