C# 在自定义检查器中指定引用时如何调用函数?

C# 在自定义检查器中指定引用时如何调用函数?,c#,unity3d,unity5,C#,Unity3d,Unity5,当通过自定义编辑器分配引用时,我需要调用/触发一个函数 在检查员之外,我会像这样处理它: [SerializeField] private SomeMember _someMemberRef; public SomeMember someMemberRef{ get { return _someMemberRef; } set { _someMemberRef= value; someFunction(); } } 但是由于自定义检查器直接分配给私有的_someMemberRef,因此不会调用

当通过自定义编辑器分配引用时,我需要调用/触发一个函数

在检查员之外,我会像这样处理它:

[SerializeField]
private SomeMember _someMemberRef;
public SomeMember someMemberRef{ get { return _someMemberRef; } set { _someMemberRef= value; someFunction(); } }
但是由于自定义检查器直接分配给私有的_someMemberRef,因此不会调用someFunction()

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

当在inspector中进行赋值时,是否有方法调用/触发someFunction()?

假设自定义inspector所针对的类被称为SomeClass,并且有一个成员私有SomeMember\u someMemberRef和一个公共SomeMember someMemberRef getter和setter,如上所述:

而不是使用

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();
}

在inspector中分配任务时调用任何公共函数。如果有人不习惯使用rect,它也可以与EditorGUILayout.ObjectField一起使用。

这真的可以编译吗?也许有更好的方法来实现您的目标。您需要它在分配时更新什么?我想在自定义检查器中显示一些附加信息,这些信息是根据_someRef的成员计算的。因此,当_someRef被另一个SomeClass对象引用替换时,我需要重新计算此信息,因为_someRefs成员的值可能已更改。我只需添加一个“重新计算”按钮,或者您可以使用
OnInspectorGUI()
函数作为更新函数,如此链接所示,如果没有其他方法,我可能会在每个OnInspectorGUI()上调用它,但我不喜欢冗余调用。我宁愿只在必要时调用someFunction()。按钮的想法可能对某些人有用,但我会对此感到不舒服。