Код: Выделить всё
public class Foo : MonoBehaviour
{
void Start()
{
var uiDoc = gameObject.AddComponent();
uiDoc.panelSettings = Resources.Load
("PanelSettings");
uiDoc.visualTreeAsset = Resources.Load("VisualTree");
var textField = uiDoc.rootVisualElement.Q("TextField");
textField.SetValueWithoutNotify("");
textField.RegisterValueChangedCallback(OnValChanged);
textField.RegisterCallback(OnKeyDown);
}
private void OnValChanged(ChangeEvent evt)
{
Debug.Log("Hello value changed");
}
private void OnKeyDown(KeyDownEvent evt)
{
Debug.Log("Hello key down");
}
}
Я знаю, что GameObject находится в сцене и имеет компонент UIDocument. Я знаю, что ресурсы существуют, их можно найти и назначить UIDocument. Строка uiDoc.rootVisualElement.Q("TextField"); фактически возвращает правильный элемент TextField. Для свойства TextField Is Delay установлено значение false, поэтому я ожидаю, что метод OnValChanged будет вызываться каждый раз, когда я изменяю символ в TextField. Объект PanelSetting в моем проекте имеет таблицу стилей темы, назначенную объекту с именем UnityDefaultRuntimeTheme, а TextSettings, назначенную объекту TextSettings по умолчанию, созданному в моем проекте.
Также, если я сохраню текстовое поле в переменной класса и зарегистрирую textField.value в функции обновления. Журнал пуст, хотя в пользовательском интерфейсе GameView я вижу изменение TextField.
Возможно, стоит также упомянуть, что строка textField.SetValueWithoutNotify("") кажется, меняет значение при просмотре с подключенным отладчиком, но не меняет значение в GameView.
Подробнее здесь: https://stackoverflow.com/questions/791 ... ot-working
Мобильная версия