【Unity Editor】AssetDatabase.SaveAssetIfDirty()を使って変更点を保存する

UnityのEditor拡張時、ScriptableObjectを保存したい時に調べたメモになります。

SaveAssetIfDirty

SaveAssetIfDirtyUnityはアセットが変更された場合の保存時に利用をします。 指定されたアセットが変更されている場合にのみ、そのアセットを保存するので、パフォーマンスの向上に役立ちます。

public class HogeScript : Editor
{
    private void Save()
    {
        // ScriptableObjectの変更を行う
        

        // アセットが変更されていれば保存を実行
        AssetDatabase.SaveAssetIfDirty(targetScriptableObject);
    }
}

SaveAssets

同じようなメソッドでSaveAssetsがあります。 こちらは、変更があったアセットが何であるかに関係なく、すべての変更が保存されます。

public class CustomEditorScript : Editor
{
    void SomeFunction()
    {
        // 何らかのアセットの変更を行う

        // アセットが変更されていれば保存を実行
        AssetDatabase.SaveAssets();
    }
}

最後に

以前まではSaveAssetIfDirtyを知らなかったのですが、意図的に保存する処理を書く場合は大概SaveAssetIfDirtyを使えば大丈夫でそうです(パフォーマンスも良さそう。