Input da tastiera in UnityKeyboard input in Unity

Spazio dei nomi: UnityEngineNamespace: UnityEngine
Tipo: TouchScreenKeyboardType: TouchScreenKeyboard

Sebbene HoloLens supporti molte forme di input, incluse le tastiere Bluetooth, la maggior parte delle applicazioni non può presupporre che tutti gli utenti dispongano di una tastiera fisica disponibile.While HoloLens supports many forms of input including Bluetooth keyboards, most applications can't assume that all users will have a physical keyboard available. Se l'applicazione richiede un input di testo, è necessario specificare una qualsiasi forma di tastiera sullo schermo.If your application requires text input, some form of on-screen keyboard should be provided.

Unity fornisce la classe TouchScreenKeyboard per accettare l'input da tastiera quando non è disponibile una tastiera fisica.Unity provides the TouchScreenKeyboard class for accepting keyboard input when there's no physical keyboard available.

Comportamento della tastiera di sistema HoloLens in UnityHoloLens system keyboard behavior in Unity

In HoloLens, TouchScreenKeyboard sfrutta la tastiera su schermo del sistema.On HoloLens, the TouchScreenKeyboard leverages the system's on-screen keyboard. La tastiera su schermo del sistema non può sovrapporsi a una visualizzazione volumetrica.The system's on-screen keyboard can't overlay on top of a volumetric view. Unity deve creare una visualizzazione XAML 2D secondaria per mostrare la tastiera e tornare alla visualizzazione volumetrica una volta inviato l'input.Unity has to create a secondary 2D XAML view to show the keyboard then return back to the volumetric view once input has been submitted. Il flusso utente sarà simile al seguente:The user flow goes like this:

  1. L'utente esegue un'azione che causa il codice dell'app per chiamare TouchScreenKeyboardThe user performs an action causing app code to call TouchScreenKeyboard
    • L'app è responsabile della sospensione dello stato dell'app prima della chiamata a TouchScreenKeyboardThe app is responsible for pausing app state before calling TouchScreenKeyboard
    • L'app può terminare prima di tornare alla visualizzazione volumetricaThe app may terminate before ever switching back to the volumetric view
  2. Unity passa a una visualizzazione XAML 2D, che è posizionata automaticamente nel mondoUnity switches to a 2D XAML view, which is autoplaced in the world
  3. L'utente immette il testo usando la tastiera di sistema e invia o AnnullaThe user enters text using the system keyboard and submits or cancels
  4. Unity ritorna alla visualizzazione volumetricaUnity switches back to the volumetric view
    • L'app è responsabile della ripresa dello stato dell'app al termine della TouchScreenKeyboardThe app is responsible for resuming app state when the TouchScreenKeyboard is done
  5. Il testo inviato è disponibile in TouchScreenKeyboardSubmitted text is available in the TouchScreenKeyboard

Visualizzazioni tastiera disponibiliAvailable keyboard views

Sono disponibili sei diverse visualizzazioni tastiera:There are six different keyboard views available:

  • Casella di testo a riga singolaSingle-line textbox
  • Casella di testo a riga singola con titoloSingle-line textbox with title
  • Casella di testo a più righeMulti-line textbox
  • Casella di testo a più righe con titoloMulti-line textbox with title
  • Casella password a riga singolaSingle-line password box
  • Casella password a riga singola con titoloSingle-line password box with title

Come abilitare la tastiera di sistema in UnityHow to enable the system keyboard in Unity

La tastiera di sistema HoloLens è disponibile solo per le applicazioni Unity esportate con il "tipo di compilazione UWP" impostato su "XAML".The HoloLens system keyboard is only available to Unity applications that are exported with the "UWP Build Type" set to "XAML". Quando si sceglie "XAML" come "tipo di compilazione UWP" su "D3D", si verificano compromessi.There are tradeoffs you make when you choose "XAML" as the "UWP Build Type" over "D3D". Se non si ha familiarità con questi compromessi, può essere utile esplorare una soluzione di input alternativa alla tastiera di sistema.If you aren't comfortable with those tradeoffs, you may wish to explore an alternative input solution to the system keyboard.

  1. Aprire il menu file e selezionare impostazioni di compilazione...Open the File menu and select Build Settings...
  2. Verificare che la piattaforma sia impostata su Windows Store, che l' SDK sia impostato su Universal 10 e impostare il tipo di compilazione UWP su XAML.Ensure the Platform is set to Windows Store, the SDK is set to Universal 10, and set the UWP Build Type to XAML.
  3. Nella finestra di dialogo impostazioni di compilazione selezionare il pulsante Impostazioni lettore...In the Build Settings dialog, select the Player Settings... button
  4. Selezionare la scheda impostazioni per Windows StoreSelect the Settings for Windows Store tab
  5. Espandi il gruppo altre impostazioniExpand the Other Settings group
  6. Nella sezione rendering selezionare la casella di controllo realtà virtuale supportata per aggiungere un nuovo elenco dispositivi di realtà virtualeIn the Rendering section, check the Virtual Reality Supported checkbox to add a new Virtual Reality Devices list
  7. Assicurarsi che Windows olografico sia visualizzato nell'elenco degli SDK di realtà virtualeEnsure Windows Holographic appears in the list of Virtual Reality SDKs

Nota

Se la compilazione non viene contrassegnata come realtà virtuale supportata con il dispositivo HoloLens, il progetto viene esportato come app XAML 2D.If you don't mark the build as Virtual Reality Supported with the HoloLens device, the project will export as a 2D XAML app.

Uso della tastiera di sistema nell'app UnityUsing the system keyboard in your Unity app

Dichiarare la tastieraDeclare the keyboard

Nella classe dichiarare una variabile per archiviare TouchScreenKeyboard e una variabile per contenere la stringa restituita dalla tastiera.In the class, declare a variable to store the TouchScreenKeyboard and a variable to hold the string the keyboard returns.

UnityEngine.TouchScreenKeyboard keyboard;
public static string keyboardText = "";

Richiama la tastieraInvoke the keyboard

Quando si verifica un evento che richiede l'input da tastiera, chiamare una di queste funzioni a seconda del tipo di input che si desidera utilizzare come titolo nel parametro textPlaceholder.When an event occurs requesting keyboard input, call one of these functions depending on the type of input you want using the title in the textPlaceholder parameter.

// Single-line textbox
keyboard = TouchScreenKeyboard.Open("", TouchScreenKeyboardType.Default, false, false, false, false);

// Single-line textbox with title
keyboard = TouchScreenKeyboard.Open("", TouchScreenKeyboardType.Default, false, false, false, false, "Single-line title");

// Multi-line textbox
keyboard = TouchScreenKeyboard.Open("", TouchScreenKeyboardType.Default, false, true, false, false);

// Multi-line textbox with title
keyboard = TouchScreenKeyboard.Open("", TouchScreenKeyboardType.Default, false, true, false, false, "Multi-line Title");

// Single-line password box
keyboard = TouchScreenKeyboard.Open("", TouchScreenKeyboardType.Default, false, false, true, false);

// Single-line password box with title
keyboard = TouchScreenKeyboard.Open("", TouchScreenKeyboardType.Default, false, false, true, false, "Secure Single-line Title");

Recupera contenuto tipizzatoRetrieve typed contents

Nel ciclo di aggiornamento controllare se la tastiera ha ricevuto il nuovo input e archiviarlo per l'uso altrove.In the update loop, check if the keyboard received new input and store it for use elsewhere.

if (TouchScreenKeyboard.visible == false && keyboard != null)
{
       if (keyboard.status == TouchScreenKeyboard.Status.Done)
       {
           keyboardText = keyboard.text;
           keyboard = null;
       }
}

Opzioni di tastiera alternativeAlternative keyboard options

Si comprende che la disattivazione di una visualizzazione volumetrica in una visualizzazione 2D non è il modo ideale per ottenere l'input di testo dall'utente.We understand that switching out of a volumetric view into a 2D view isn't the ideal way to get text input from the user.

Le alternative attuali per sfruttare la tastiera di sistema tramite Unity includono:The current alternatives to leveraging the system keyboard through Unity include:

  • Uso della dettatura vocale per l'input (Nota: si tratta spesso di un errore soggetto a parole non trovate nel dizionario e non è adatto per l'immissione della password)Using speech dictation for input (Note: this is often error prone for words not found in the dictionary and isn't suitable for password entry)
  • Creare una tastiera che funzioni nella visualizzazione esclusiva delle applicazioniCreate a keyboard that works in your applications exclusive view

Successivo checkpoint di sviluppoNext Development Checkpoint

Se si sta seguendo il percorso di sviluppo di Unity, è possibile esplorare le funzionalità e le API della piattaforma per la realtà mista.If you're following the Unity development journey we've laid out, you're in the midst of exploring the Mixed Reality platform capabilities and APIs. Da qui è possibile passare a qualsiasi argomento o passare direttamente alla distribuzione dell'app in un dispositivo o in un emulatore.From here, you can continue to any topic or jump directly to deploying your app on a device or emulator.