2017-01-25 8 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

カスタムインスペクタが意図しているクラスが工assと呼ばれ、上記のように公共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(); 
} 

インスペクタで割り当て時にパブリック関数を呼び出す。また、rectを使って作業するのが快適でない場合は、EditorGUILayout.ObjectFieldも使用できます。

関連する問題