Я не совсем понимаю из вашего вопроса, являются ли OnEnable
и OnDisable
частью вашего сценария редактора или самого компонента.
Если позже:
OnEnable
вызывается, когда компонент переходит из отключенного состояния в включенное, , а не , когда он получает фокус в инспекторе.Точно так же OnDisabled
вызывается, когда компонент или соответствующий GameObject отключен, не , если он теряет фокус.
Если то, что вы хотите, реагирует на получение и потерю фокуса в инспекторе, егодолжно быть OnEnable
и OnDisable
самого сценария Inspector.Например,
[CustomEditor(typeof(XY)]
public class XYEditor : Editor
{
XY _target;
SerializedProperty list;
// Called when the class gains focus
private void OnEnable()
{
_target = (XY) target;
//Link the SerializedProperty
list = serializedObject.FindProperty("listOfDictionaryKeys");
}
public override void OnInpectorGUI()
{
//whatever your inspector does
}
// Called when the component looses focus
private void OnDisable()
{
serializedObjet.Update();
// empty list
list.ClearArray;
// Reading access to the target's fields is okey
// as long as you are sure they are set at the moment the editor is closed
foreach(var key in _target.myDoctionary.keys)
{
list.AddArrayElementAtIndex(list.arraySize);
var element = list.GetArrayElementAtIndex(list.arraySize - 1);
element.stringValue = key;
}
serialzedObject.ApplyModifiedProperties;
}
}
Я также не вижу, где вы заполняете словарь, поскольку вы говорите, что это не происходит в инспекторе.Это может быть проблемой, когда mixonb SerializedProperty
имеет прямой доступ к полям.