雖然HoloLens支持很多種輸入方式,包括藍牙鍵盤在內。但是大部分應用還是不能斷定用戶有物理鍵盤可以輸入,所以虛擬鍵盤輸入還是必須要提供的。
Unity提供了一個TouchScreenKeyboard類用於在沒有物理鍵盤時接受虛擬鍵盤的輸入。

HoloLens system keyboard behavior in Unity 在Unity中HoloLens系統鍵盤的做法
HoloLens上 TouchScreenKeyboard 使用的就是系統虛擬鍵盤。系統鍵盤不能出現在立體視圖的頂部,所以只能創建一個2D XAML視圖來調用系統鍵盤。輸入完成返回到全息視圖后,輸入結果會立即被提交過來。操作流程如下:
- 用戶調用方法來使應用喚起 TouchScreenKeyboard
- 在喚起 TouchScreenKeyboard 之前應用要響應處理應用暫停事件
- 在不斷切換回全息視圖前應用可能會被中斷
- Unity將視圖切換到一個自動放置在世界中的2D XAML視圖上
- 用戶使用系統鍵盤輸入文本,並選擇提交或者取消
- Unity將視圖切換會全息視圖
- 在TouchScreenKeyboard 操作完成后,應用需要相應處理應用恢復事件
- 通過 TouchScreenKeyboard 獲取提交的文本內容
Available keyboard views 可使用的鍵盤視圖
有六種不同的鍵盤視圖可以直接拿來使用:
- 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之間你需要做些權衡(這里主要指性能差異吧),如果你不能做出取舍的話,你可能會希望有個鍵盤輸入的其他方案。
- 打開File->Build Settings菜單
- 確保Platform是Windows Store, SDK選項設為 Universal 10,並將UWP Build Type 設為 XAML。
- 打開Player Settings菜單
- 展開Settings for Windows Store->Other Settings菜單
- 勾選Rendering目錄下的Virtual Reality Supported選項,確保Windows Holographic出現在Virtual Reality Devices列表中
- 如果不勾選這個選項,項目會被導出為2D XAML應用
Using the system keyboard in your Unity app 在Unity應用中使用系統鍵盤
命名空間: UnityEngine
Declare the keyboard 聲明鍵盤
首先要聲明一個鍵盤對象和一個用來保存返回結果的字符串
UnityEngine.TouchScreenKeyboard keyboard; public static string keyboardText = ""
Invoke the keyboard 調用鍵盤
當請求鍵盤輸入的事件發生后,調用任意一個你希望的鍵盤來響應用戶輸入。
注意: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視圖進行鍵盤輸入不是理想的方案。
目前其他的解決方案包括:
- 使用聽寫識別來輸入內容
- 這個一般容易出錯,並且不適用於輸入密碼
- 自定義一個鍵盤在應用中使用
