【问题标题】:Unity Editor Scripting: How to update a CustomEditor SerializedProperty programmatically?Unity 编辑器脚本:如何以编程方式更新 CustomEditor SerializedProperty?
【发布时间】:2016-02-01 12:05:00
【问题描述】:

标题已经说了……

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

我如何告诉 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 更改它时)。通过脚本更新时,如何使更改也反映出来?

【问题讨论】:

    标签: c# unity3d editor game-engine


    【解决方案1】:

    在你的覆盖上使用这个:

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

    【讨论】:

    • 非常感谢您提供这个答案。很难找到使自定义编辑器随更改自动更新的简单方法。我创建了一个关卡编辑器,我不喜欢它每帧都创建/销毁对象,即使没有任何更改。这正是我需要的。再次感谢!
    猜你喜欢
    • 2012-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-12
    • 1970-01-01
    • 2013-11-18
    • 2019-05-11
    • 1970-01-01
    相关资源
    最近更新 更多