【Unity】Editor拡張で入力した内容の保存

Editor拡張した際、IntField等で値を更新するだけでは値は保存されていません。

別途シーンの更新があって保存した場合は一緒に更新されますが、それ以外の場合はUnityを閉じたときやアプリを再生したときに値が戻ります。

そのためシーン内にいるとき、プレハブを編集するときに更新があれば保存する処理を入れる必要があります。

using UnityEditor;
using UnityEditor.SceneManagement;

public override void OnInspectorGUI()
{
    EditorGUI.BeginChangeCheck();

    // 省略
    // Instance = (クラス名)target

    if (EditorGUI.EndChangeCheck())
    {
        string path = Instance.gameObject.scene.path;
        if (path == null || !path.Contains(".unity")) { EditorUtility.SetDirty(Instance); }
        else { EditorSceneManager.MarkSceneDirty(EditorSceneManager.GetActiveScene()); }
    }
}

SerializeObjectを使う場合は下記になります。

using UnityEditor;


public override void OnInspectorGUI()
{
    serializedObject.Update();

    // 省略

    serializedObject.ApplyModifiedProperties();
}

投稿者プロフィール

おかもち
おかもち
ゲームとか作ってます。
Unity触ってることが多いです。
   

コメントを残す


CAPTCHA