2017-01-25 7 views
3

Мне нужно вызвать/вызвать функцию, когда ссылка назначена через специальный редактор.Как вызвать функцию, когда ссылка назначена в пользовательском инспекторе?

За инспектора я бы заботиться о нем, как это:

[SerializeField] 
private SomeMember _someMemberRef; 
public SomeMember someMemberRef{ get { return _someMemberRef; } set { _someMemberRef= value; someFunction(); } } 

Но поскольку пользовательский инспектор непосредственно назначает частному _someMemberRef, SomeFunction() не будет вызываться.

EditorGUILayout.PropertyField(serializedObject.FindProperty("_someMemberRef")); 

Есть ли способ вызвать/вызвать someFunction(), когда назначение происходит в инспекторе?

+0

действительно ли это скомпилировано? – maksymiuk

+0

Возможно, есть лучший способ достичь того, что вы пытаетесь сделать. Что именно вам понадобится для обновления при назначении? – maksymiuk

+0

Я хотел бы отобразить некоторую дополнительную информацию в моем обычном инспекторе, которая рассчитывается на основе членов _someRef. Поэтому, когда _someRef заменяется другой ссылкой на объект SomeClass, мне нужно пересчитать эту информацию, потому что значения членов _someRefs могли быть изменены. – Simeon

ответ

0

Предполагая, класс, для которого пользовательский инспектор предназначен называется SomeClass и имеет элемент частный SomeMember _someMemberRef с общественного SomeMember someMemberRef геттер и сеттер, как упоминалось выше:

Вместо использования

EditorGUILayout.PropertyField(serializedObject.FindProperty("_someMemberRef")); 

в соответствующем редактор производного класса, можно использовать

SomeClass someClassRef = (SomeClass) target; 
SomeMember someMemberRef = null; 
someMemberRef = (SomeMember)EditorGUI.ObjectField(EditorGUILayout.GetControlRect(), "Some Member Ref", someClassRef.someMemberRef, typeof(SomeMember), false); 
if (someMemberRef != someClassRef.someMemberRef) 
{ 
    someClassRef.someMemberRef = someMemberRef; 
    someClassRef.someFunction(); 
} 

Чтобы вызвать любую публичную функцию при назначении в инспекторе. Он также работает с EditorGUILayout.ObjectField, если кому-то не удобно работать с ошибками.

 Смежные вопросы

  • Нет связанных вопросов^_^