Unity Editor 脚本:如何以编程方式更新 CustomEditor SerializedProperty?

Unity Editor Scripting: How to update a CustomEditor SerializedProperty programmatically?

标题已经说了...

我在 Unity 中有一个用于 C# class 的自定义编辑器脚本,用户可以通过 UI 设置多个参数。但有一种情况,属于 CustomEditor class 的 class 中的某些序列化变量以编程方式更改,并且更改未在检查器中更新。

如何告诉 CustomEditor class 它应该更新已更改的变量?

示例代码:

public class Foo
{
    [SerializeField] private float value;

    public void ChangeValue()
    {
        value = 1.0f;
    }
}


[CustomEditor(typeof (Foo))]
internal class FooEditor : Editor
{
    private Foo self;
    private SerializedProperty value;

    internal void OnEnable()
    {
        self = (target as Foo);
        value = serializedObject.FindProperty("value");
    }

    public override void OnInspectorGUI()
    {
        serializedObject.Update();

    }
}

Foo 中,我想更改 value vis 脚本,但是当通过脚本设置时,值更新未反映在编辑器 UI 中(仅当用户通过 UI).我怎样才能使更改在通过脚本更新时也反映出来?

在你的覆盖上使用这个:

public override void OnInspectorGUI ()
{   
    if (GUI.changed)
    {
        value = mynewvalue;
    }
}