EditorGUILayout.TextField不更改/工作Unity 2017.1.1f1

时间:2017-10-09 05:10:24

标签: c# unity3d editor unity5 inspector

问题
使用EditorGUILayout.TextField编辑货币名称允许我修改字段中的文本,但不修改变量或保存我所做的更改。视频显示了我的意思,如果你不明白:

  

https://www.youtube.com/watch?v=fr3cA0_YhXM

代码无效

for(int cnt = 0; cnt < Script.CurrencyLevels; cnt++)
{
    EditorGUILayout.LabelField("Currency " + cnt + ": ");
    Script.CurrencyName[cnt] = EditorGUILayout.TextField(Script.CurrencyName[cnt]);
}

完整代码链接

https://hastebin.com/omajulihor.cs
https://hastebin.com/eqefuvotog.cs 



语言:C#
引擎:Unity 2017.1.1f1

提前感谢您的帮助&lt; 3

1 个答案:

答案 0 :(得分:0)

首先在ypur代码中,你有一行作为OnEditorGUI的开头:

Script.CurrencyName = new string[Script.CurrencyLevels];

即使您不更改大小,实际上也会设置CurrencyName没有给定大小的新空数组。并删除你在这一行中设置的所有内容:

Script.CurrencyName[cnt] = EditorGUILayout.TextField(Script.CurrencyName[cnt]);

要解决此问题,您应该编写一些代码来将值从“旧”数组复制到“新”数组。

此外,当您在自定义编辑器类中更改某些值时,需要在OnInspectorGUI()方法中添加两行代码,一行在开头和结尾:

    public override void OnInspectorGUI()
    {
        //update the editor's representation of the object
        // which you're using the editor for
        serializedObject.Update();

        // Here goes your editor's custom logic

        //Save the changes you or editor's user has made to 
        // the target object
        serializedObject.ApplyModifiedProperties();
     }

有关serializedObject的详情,请参阅link