はじめに
以下のコードを書いていたところ、Unity2022.3.10f1では正しく動作しないことに気がつきました。(Unity6では正しく動作していました)
using UnityEditor; using UnityEngine; public class SampleWindow : EditorWindow { [SerializeField] private string[] _texts; [MenuItem("Tools/SampleWindow")] public static void Open() { GetWindow<SampleWindow>(); } private void OnGUI() { var serializedObject = new SerializedObject(this); serializedObject.Update(); // EditorWindowには正しく表示されているが、入力してもデフォルト値に戻ってしまう EditorGUILayout.PropertyField(serializedObject.FindProperty(nameof(_texts)), true); serializedObject.ApplyModifiedProperties(); } }
対処法
OnGUI
で毎回SerializedObject
を生成せずにキャッシュするようにしたら直りました。
using UnityEditor; using UnityEngine; public class SampleWindow : EditorWindow { [SerializeField] private string[] _texts; private SerializedObject _serializedObject; [MenuItem("Tools/SampleWindow")] public static void Open() { GetWindow<SampleWindow>(); } private void OnGUI() { _serializedObject ??= new SerializedObject(this); _serializedObject.Update(); // ちゃんと入力されるようになった EditorGUILayout.PropertyField(_serializedObject.FindProperty(nameof(_texts)), true); _serializedObject.ApplyModifiedProperties(); } }