Unity: Почему я не могу автоматически выбрать поле ввода? - PullRequest
0 голосов
/ 27 декабря 2018

В настоящее время я занимаюсь разработкой системы Highscore для Android.У меня есть поле ввода, где игрок будет вводить свое имя.

Я хочу, чтобы игроку не приходилось нажимать на это поле ввода, чтобы ввести его. Однаковсе мои попытки пока не увенчались успехом.


В настоящее время у меня есть префаб под названием HighScoreTemplate .Этот префаб имеет поле ввода пользовательского интерфейса (для имени) и текстовый объект пользовательского интерфейса (для оценки).Он также имеет скрипт под названием HighScoreTemplate.cs .

Я создал функцию Select () в сценарии HighScoreTemplate.cs , которая вызовет .Select () в поле ввода, а затем .ActivateInputField () впоследствии.

public void Select()
{
    // Select it
    NameField.Select();
    NameField.ActivateInputField();
}

Однако это не было автоматическим выбором поля ввода NameField, так как клавиатура не выскочила на моем Androidустройство.

В ходе отладки я убедился, что эта функция Select () вызывается и запускается.

Я также подтвердил, что это поле ввода является интерактивным, я могу видеть флажок для этого флажка в инспекторе, когда я выбираю его.


Затем я предположил, что, возможно, Unity имел задержку, поэтому я попытался этот тестчтобы посмотреть, сработает ли это:

int counter = 1;
while(counter <= 50 && !_newHighScoreTemplate.NameField.isFocused)
{
    _newHighScoreTemplate.Select();
    Debug.Log("Select Attempt #" + counter);
    counter++;
}

Этот тест дал мне тот же результат, клавиатура Android не всплывала и позволяла мне вводить текст в поле ввода.


Может ли кто-нибудь пролить свет на то, что я делаю неправильно?Почему мое поле ввода не получает фокус и почему клавиатура в Android не выскакивает, чтобы я мог печатать в поле, не нажимая сначала на него?

1 Ответ

0 голосов
/ 02 сентября 2019

Вы пробовали использовать сопрограмму?

void OnEnable()
{        
    StartCoroutine(SelectInputField());
}

IEnumerator SelectInputField()
{
    yield return new WaitForEndOfFrame();
    NameField.ActivateInputField();
}
...