えんじにあ・めも

日々の生活に役立つ記事をエンジニア視点で

【Unity】Editor拡張でScriptableObjectを保存するには

時々Editorスクリプトを書くと、これをよく忘れてしまいます。
そして調べると、複雑なコードのサンプルが多くて訳がわからなくなります。
Editor拡張したときの設定情報をScriptableObjectに書き出してAssetにすることがよくありますが
そのときの保存方法です。なるべく簡単に書きました。

ぶっちゃけ保存するときには、書き換えた後にEditorUtility.SetDirty()というメソッドを使用します。
引数にはAssetDatabaseで開いたScriptableObjectを指定します。
サンプルコードです。

Unity Editor ScriptableObject

EditorGUI.BeginChangeCheck()~EditorGUI.EndChangeCheck()で変更を検知して、
EditorUtility.SetDirty()を呼び出します。
こうするとUnity終了時にScriptableObjectの中身がassetに書き出されます。
アセットを保存するというとAssetDatabase.SaveAssetsとか使おうとしちゃいますね。
こっちを使うとDirtyが立ってるAssetを保存するだけなので、実は反映されません。

UnityEditor.Undo.RecordObjectはおまけです。入れておくとRedo/Undoができますね。
ところでUnityはProjectSettings等、終了時に吐き出す物が多いです。
コミットをするときはUnityを終了してから行うように心がけたいですね。