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を使えば大丈夫でそうです(パフォーマンスも良さそう。