EditorGUILayout.TextField не изменяется / работает Unity 2017.1.1f1
вопрос
С помощью 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
Заранее спасибо за помощь <3
2 ответа
Прежде всего, в коде 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
см ссылку
pathPattern= EditorGUILayout.TextField("pattern link ends with id.unity",pathPattern);
Проблема в том, что наvoid OnGUI()
обновляет каждый кадр
Решение состоит в том, чтобы переопределить строку по умолчанию