以下の内容はhttps://www.hanachiru-blog.com/entry/2024/06/06/120000より取得しました。


【Unity】EditorWindowでEditorGUILayout.PropertyField&SerializedObject.FindPropertyをしてもデフォルト値にクリアされてしまう問題の対処法

はじめに

以下のコードを書いていたところ、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();
    }
}
正しく入力できるようになった様子



以上の内容はhttps://www.hanachiru-blog.com/entry/2024/06/06/120000より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14