Podczas pracy z Pola wejściowe Nova UI do przewijania w Unity 6, natknęliśmy się na frustrującą kwestię: TouchScreenKeyboard.isSupported wracał true Desktop platformy takie jak Windows i macOS. Ale wirtualna klawiatura się nie pokazała. Dlaczego? Ponieważ Unity definiuje „wsparcie” luźno – jeśli sprzęt klawiatura jest dostępna, zwraca true, nawet jeśli miękka klawiatura nigdy nie jest wyświetlana.
Objaw w NovaUI TextFieldMobileInput.InputLoop
if (touchScreenKeyboardController.Status != TouchScreenKeyboard.Status.Visible)
Ten warunek nie działał prawidłowo: błędnie zakładał, że klawiatura jest widoczna, co powodowało niepożądaną utratę fokusu lub zakończenie korutyny.
Właściwa poprawka
Nie polegaj na TouchScreenKeyboard.isSupported Sam. Połącz to z Application.isMobilePlatform dla czystej kontroli runtime:
void Awake()
{
if (!Application.isMobilePlatform)
{
Debug.Log("TextFieldMobileInput disabled on non-mobile platform.");
this.enabled = false;
}
}
lub jeśli chcesz łatać TextFieldMobileInput w NovaUI
protected override void OnEnable()
{
Debug.Log("TouchScreenKeyboard.isSupported: " + TouchScreenKeyboard.isSupported);
if (!Application.isMobilePlatform || !TouchScreenKeyboard.isSupported)
{
Debug.Log("Disabling TextFieldMobileInput – not a mobile platform");
enabled = false;
// If touchscreen keyboard not supported on this device, do nothing
return;
}
base.OnEnable();
// Subscribe to selection changed so we can update the touch screen
// keyboard whenever the input field selection changes
inputField.OnTextSelectionChanged += UpdateTouchScreenKeyboardSelection;
}
Unika to uruchamiania tylko mobilnego kodu wejściowego na platformach, które go nie obsługują.
Wynik
- Na Android / iOS:
TextFieldMobileInputobsługuje miękkie wejście klawiatury - Na pulpicie:
TextFieldKeyboardInputPrzejmuje czysto - Żadnych wprowadzających w błąd kontroli klawiatury, żadnych zbędnych korutyn
Name
Można to nawet wyegzekwować w Edytorze za pomocą menu kontekstowego lub skryptu walidacyjnego, aby upewnić się, że prefab nie włączy tego komponentu przypadkowo podczas testowania.
Ostateczne rozważania
Platforma Unity znów atakuje – ale z jednoliniowym strażnikiem, pola wejściowe Nova UI mogą zachowywać się prawidłowo na różnych platformach.

TouchScreenKeyboard logika w czasie pracy na platformach niemobilnych