using UnityEngine; using System.Collections; using Valve.VR; public class KeyboardSample : MonoBehaviour { public UnityEngine.UI.InputField textEntry; public bool minimalMode; static bool keyboardShowing; string text = ""; static KeyboardSample activeKeyboard = null; // Use this for initialization void Start () { GetComponent().Clicked += KeyboardDemo_Clicked; } void OnEnable() { SteamVR_Utils.Event.Listen("KeyboardCharInput", OnKeyboard); SteamVR_Utils.Event.Listen("KeyboardClosed", OnKeyboardClosed); } private void OnKeyboard(object[] args) { if (activeKeyboard != this) return; Valve.VR.VREvent_t ev = (Valve.VR.VREvent_t)args[0]; VREvent_Keyboard_t keyboard = ev.data.keyboard; byte[] inputBytes = new byte[] { keyboard.cNewInput0, keyboard.cNewInput1, keyboard.cNewInput2, keyboard.cNewInput3, keyboard.cNewInput4, keyboard.cNewInput5, keyboard.cNewInput6, keyboard.cNewInput7 }; int len = 0; for (; inputBytes[len] != 0 && len < 7; len++) ; string input = System.Text.Encoding.UTF8.GetString(inputBytes, 0, len); if (minimalMode) { if (input == "\b") { if (text.Length > 0) { text = text.Substring(0, text.Length - 1); } } else if (input == "\x1b") { // Close the keyboard var vr = SteamVR.instance; vr.overlay.HideKeyboard(); keyboardShowing = false; } else { text += input; } textEntry.text = text; } else { System.Text.StringBuilder textBuilder = new System.Text.StringBuilder(1024); uint size = SteamVR.instance.overlay.GetKeyboardText(textBuilder, 1024); text = textBuilder.ToString(); textEntry.text = text; } } private void OnKeyboardClosed(object[] args) { if (activeKeyboard != this) return; keyboardShowing = false; activeKeyboard = null; } private void KeyboardDemo_Clicked() { if(!keyboardShowing) { keyboardShowing = true; activeKeyboard = this; SteamVR.instance.overlay.ShowKeyboard(0, 0, "Description", 256, text, minimalMode, 0); } } // Update is called once per frame void Update () { } }