Unity 编辑器脚本:如何以编程方式更新自定义编辑器序列化属性

本文关键字:编辑器 更新 方式 自定义 序列化 属性 编程 脚本 Unity | 更新日期: 2023-09-27 18:32:40

标题已经说了...

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

如何告诉自定义编辑器类它应该更新更改的变量?

示例代码:

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 更改它时)。如何使更改在通过脚本更新时也反映在内?

Unity 编辑器脚本:如何以编程方式更新自定义编辑器序列化属性

在覆盖中使用它:

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