问题
使用EditorGUILayout.TextField
编辑货币名称允许我修改字段中的文本,但不修改变量或保存我所做的更改。视频显示了我的意思,如果你不明白:
代码无效:
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
答案 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。