Entrada de teclado no UnityKeyboard input in Unity

Namespace: UnityEngineNamespace: UnityEngine
Tipo: TouchScreenKeyboardType: TouchScreenKeyboard

Embora o HoloLens dê suporte a muitas formas de entrada, incluindo teclados Bluetooth, a maioria dos aplicativos não pode pressupor que todos os usuários terão um Keyboard físico disponível.While HoloLens supports many forms of input including Bluetooth keyboards, most applications cannot assume that all users will have a physical keyboard available. Se seu aplicativo exigir entrada de texto, alguma forma de teclado na tela deverá ser fornecida.If your application requires text input, some form of on screen keyboard should be provided.

O Unity fornece a classe TouchScreenKeyboard para aceitar a entrada de teclado quando não há nenhum teclado físico disponível.Unity provides the TouchScreenKeyboard class for accepting keyboard input when there is no physical keyboard available.

Comportamento do teclado do sistema do HoloLens no UnityHoloLens system keyboard behavior in Unity

No HoloLens, o TouchScreenKeyboard aproveita o teclado do sistema na tela.On HoloLens, the TouchScreenKeyboard leverages the system's on screen keyboard. O teclado na tela do sistema não pode sobrepor a parte superior de uma exibição volumétricos para que o Unity precise criar uma exibição XAML 2D secundária para mostrar o teclado e retornar à exibição volumétricos depois que a entrada tiver sido enviada.The system's on screen keyboard is unable to overlay on top of a volumetric view so 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. O fluxo do usuário é assim:The user flow goes like this:

  1. O usuário executa uma ação fazendo com que o código do aplicativo chame TouchScreenKeyboardThe user performs an action causing app code to call TouchScreenKeyboard
    • O aplicativo é responsável por pausar o estado do aplicativo antes de chamar TouchScreenKeyboardThe app is responsible for pausing app state before calling TouchScreenKeyboard
    • O aplicativo pode terminar antes de mudar de volta para a exibição volumétricosThe app may terminate before ever switching back to the volumetric view
  2. O Unity alterna para uma exibição XAML 2D que é colocada automaticamente no mundoUnity switches to a 2D XAML view which is auto-placed in the world
  3. O usuário digita o texto usando o teclado do sistema e envia ou cancelaThe user enters text using the system keyboard and submits or cancels
  4. O Unity alterna para a exibição volumétricosUnity switches back to the volumetric view
    • O aplicativo é responsável por retomar o estado do aplicativo quando o TouchScreenKeyboard é concluídoThe app is responsible for resuming app state when the TouchScreenKeyboard is done
  5. O texto enviado está disponível no TouchScreenKeyboardSubmitted text is available in the TouchScreenKeyboard

Modos de exibição de teclado disponíveisAvailable keyboard views

Há seis exibições de teclado diferentes disponíveis:There are six different keyboard views available:

  • Caixa de texto de linha únicaSingle-line textbox
  • Caixa de texto de linha única com títuloSingle-line textbox with title
  • Caixa de texto de várias linhasMulti-line textbox
  • Caixa de texto de várias linhas com títuloMulti-line textbox with title
  • Caixa de senha de linha únicaSingle-line password box
  • Caixa de senha de linha única com títuloSingle-line password box with title

Como habilitar o teclado do sistema no UnityHow to enable the system keyboard in Unity

O teclado do sistema do HoloLens está disponível somente para aplicativos do Unity que são exportados com o "tipo de compilação UWP" definido como "XAML".The HoloLens system keyboard is only available to Unity applications that are exported with the "UWP Build Type" set to "XAML". Há compensações que você faz quando escolhe "XAML" como o "tipo de compilação UWP" sobre "D3D".There are tradeoffs you make when you choose "XAML" as the "UWP Build Type" over "D3D". Se você não estiver familiarizado com essas compensações, talvez queira explorar uma solução de entrada alternativa para o teclado do sistema.If you aren't comfortable with those tradeoffs, you may wish to explore an alternative input solution to the system keyboard.

  1. Abra o menu arquivo e selecione configurações de compilação...Open the File menu and select Build Settings...
  2. Verifique se a plataforma está definida como Windows Store, se o SDK está definido como Universal 10e defina o tipo de compilação UWP como 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. Na caixa de diálogo configurações de compilação , clique no botão configurações do Player...In the Build Settings dialog, click the Player Settings... button
  4. Selecione a guia configurações da Windows StoreSelect the Settings for Windows Store tab
  5. Expanda o grupo outras configuraçõesExpand the Other Settings group
  6. Na seção renderização , marque a caixa de seleção suporte à realidade virtual para adicionar uma nova lista de dispositivos de realidade virtualIn the Rendering section, check the Virtual Reality Supported checkbox to add a new Virtual Reality Devices list
  7. Verifique se o Windows Holographic aparece na lista de SDKs de realidade virtualEnsure Windows Holographic appears in the list of Virtual Reality SDKs

Observação

Se você não marcar a compilação como realidade virtual com suporte com o dispositivo de HoloLens, o projeto será exportado como um aplicativo 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.

Usando o teclado do sistema em seu aplicativo do UnityUsing the system keyboard in your Unity app

Declarar o tecladoDeclare the keyboard

Na classe, declare uma variável para armazenar o TouchScreenKeyboard e uma variável para conter a cadeia de caracteres que o teclado retorna.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 = "";

Invocar o tecladoInvoke the keyboard

Quando ocorrer um evento solicitando entrada de teclado, chame uma dessas funções dependendo do tipo de entrada desejado.When an event occurs requesting keyboard input, call one of these functions depending upon the type of input desired. Observe que o título é especificado no parâmetro textplaceholder.Note that the title is specified 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");

Recuperar conteúdo digitadoRetrieve typed contents

No loop de atualização, verifique se o teclado recebeu uma nova entrada e armazene-a para uso em outro lugar.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.done == true)
       {
           keyboardText = keyboard.text;
           keyboard = null;
       }
}

Opções de teclado alternativasAlternative keyboard options

Entendemos que a mudança de uma exibição volumétricos para uma exibição 2D não é a maneira ideal de obter a entrada de texto do usuário.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.

As alternativas atuais para aproveitar o teclado do sistema por meio do Unity incluem:The current alternatives to leveraging the system keyboard through Unity include:

  • Usando o ditado de fala para entrada (Observação: isso costuma ser propenso a erros para palavras não encontradas no dicionário e não é adequado para entrada de senha)Using speech dictation for input (Note: this is often error prone for words not found in the dictionary and is not suitable for password entry)
  • Criar um teclado que funciona em sua exibição exclusiva de aplicativosCreate a keyboard that works in your applications exclusive view