HoloLens開發手記 - Unity之Keyboard input 鍵盤輸入

雖然HoloLens支持不少種輸入方式,包括藍牙鍵盤在內。可是大部分應用仍是不能判定用戶有物理鍵盤能夠輸入,因此虛擬鍵盤輸入仍是必需要提供的。html

Unity提供了一個TouchScreenKeyboard類用於在沒有物理鍵盤時接受虛擬鍵盤的輸入。app

 

 

HoloLens system keyboard behavior in Unity 在Unity中HoloLens系統鍵盤的作法


 

HoloLens上 TouchScreenKeyboard 使用的就是系統虛擬鍵盤。系統鍵盤不能出如今立體視圖的頂部,因此只能建立一個2D XAML視圖來調用系統鍵盤。輸入完成返回到全息視圖後,輸入結果會當即被提交過來。操做流程以下:性能

  1. 用戶調用方法來使應用喚起 TouchScreenKeyboard
    • 在喚起 TouchScreenKeyboard 以前應用要響應處理應用暫停事件
    • 在不斷切換回全息視圖前應用可能會被中斷
  2. Unity將視圖切換到一個自動放置在世界中的2D XAML視圖上
  3. 用戶使用系統鍵盤輸入文本,並選擇提交或者取消
  4. Unity將視圖切換會全息視圖
    • TouchScreenKeyboard 操做完成後,應用須要相應處理應用恢復事件
  5. 經過 TouchScreenKeyboard 獲取提交的文本內容

 

Available keyboard views 可以使用的鍵盤視圖

 

有六種不一樣的鍵盤視圖能夠直接拿來使用:ui

  • Single-line textbox  單行文本框
  • Single-line textbox with title 帶標題的單行文本框
  • Multi-line textbox 多行文本框
  • Multi-line textbox with title 帶標題的多行文本框
  • Single-line password box 單行密碼框
  • Single-line password box with title 帶標題的單行密碼框

 

How to enable the system keyboard in Unity 如何在Unity中啓用系統鍵盤


 

HoloLens系統鍵盤只能在UWP項目導出類型爲XAML app的應用中使用。對於導出類型D3D和XAML之間你須要作些權衡(這裏主要指性能差別吧),若是你不能作出取捨的話,你可能會但願有個鍵盤輸入的其餘方案spa

  1. 打開File->Build Settings菜單
  2. 確保Platform是Windows Store, SDK選項設爲 Universal 10,並將UWP Build Type 設爲 XAML。
  3. 打開Player Settings菜單
  4. 展開Settings for Windows Store->Other Settings菜單
  5. 勾選Rendering目錄下的Virtual Reality Supported選項,確保Windows Holographic出如今Virtual Reality Devices列表中
  • 若是不勾選這個選項,項目會被導出爲2D XAML應用

 

Using the system keyboard in your Unity app 在Unity應用中使用系統鍵盤


 

命名空間UnityEngine3d

類型TouchScreenKeyboardcode

 

Declare the keyboard 聲明鍵盤

 

首先要聲明一個鍵盤對象和一個用來保存返回結果的字符串orm

 

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

 

Invoke the keyboard 調用鍵盤

 

當請求鍵盤輸入的事件發生後,調用任意一個你但願的鍵盤來響應用戶輸入。htm

注意:textPlaceHolder參數的標題是特定的對象

 

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");

 

Retrieve typed contents 取回輸入內容

 

在Update()循環中檢查鍵盤是否有新的輸入並存儲其內容

 

if (TouchScreenKeyboard.visible == false && keyboard != null)
{
       if (keyboard.done == true)
       {
           keyboardText = keyboard.text;
           keyboard = null;
       }
}

 

Alternative keyboard options 其餘的鍵盤選項


 

咱們知道從全息視圖切換回2D視圖進行鍵盤輸入不是理想的方案。

目前其餘的解決方案包括:

  • 使用聽寫識別來輸入內容
    • 這個通常容易出錯,而且不適用於輸入密碼
  • 自定義一個鍵盤在應用中使用
相關文章
相關標籤/搜索