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;
}
}
标题已经说了...
我在 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;
}
}