[SerializeField]もしくは [System.Serializable]も使って変数の保存をしています。
Editor側からは
if (GUI.changed) { EditorUtility.SetDirty(target); serializedObject.ApplyModifiedProperties(); }
を呼び出し、ちゃんと変数の保存は出来ています。
しかし、他のScriptableObjectから読み取った値を保存しようとした場合、Playボタンを押した途端に値がリセットされてしまいます。
具体的には以下のような構成です。
[System.Serializable] public class A: ScriptableObject { [SerializeField] public List<string> Names; } [System.Serializable] public class B: ScriptableObject { [SerializeField] public A Sc_A; [SerializeField] public string a_name; }
classA をScriptableObjectとして管理しておきclassBのInspector側からclass Aを設置しています。
class B のa_nameには class A の Names の中から好きなものをインスペクターから選択できるようにしたいので、EditorGUILayout.popupを利用して Sc_A にセットされているclass AのNamesを取得、選択できるようにしています。
Popupで選択し、Inspector上で保存は出来るようにはなりましたが。 Playボタンを押したタイミングで一度値が初期化されているようで、どうしてもデフォルト値に戻されてしまいます。
ただ、if(application.isPlaying)で起動中かどうかとゆう処理を挟めば変動の心配はないのですが、あまりに力技な感じがしてこれといった方法がないか探しています。
いろいろ資料を探してみたのですが、ScriptableObjectをScriptableObjectから参照している例が少なくあまり有力な情報が得られません。
アドバイスお願い致します。
回答1件
あなたの回答
tips
プレビュー