在 VR 应用开发中,文本输入是一个常见需求,而 Unity 的 Interaction Toolkit 提供了空间键盘功能,使开发者能够快速实现这一功能。本文将详细介绍如何在 Unity XR 项目中实现两种形态的空间键盘:全局空间键盘和世界空间键盘。
在开始实现空间键盘功能前,需要先导入相关资源包并解决依赖问题。
首先确保已安装 Unity XR Interaction Toolkit,然后进行以下操作:

导入过程中会提示对 TextMesh Pro 的依赖,这是因为键盘上的文字是通过 TextMesh Pro 呈现的。
初次导入后可能会遇到版本依赖问题。如果运行应用程序时出现与 KeyboardOptimizer.cs 相关的报错,如下图所示:

此时需要升级 TextMesh Pro 插件:

全局空间键盘是指可以跟随用户位置动态生成的键盘。实现步骤如下:
有两种方式添加键盘管理器:
方式一:手动添加组件
方式二:使用预制体(推荐)

该预制体已经配置好了必要的参数,包括键盘预制体和偏移量(如下图所示),在场景中实例化后是一个空游戏对象,即在场景中不可见。

同样有两种方式:
方式一:手动创建
方式二:使用预制体

注意:XR Keyboard Display 组件是实现输入框与键盘关联的核心组件。在使用全局键盘时,不要勾选 “Use Scene Keyboard” 选项。
运行应用程序,移动到输入框前方,使用射线点击输入框,即可激活键盘并进行输入。输入完成后点击 Enter 键提交,键盘会自动消失。用户还可以抓取键盘并调整其位置,避免遮挡视线。

世界空间键盘是固定在场景特定位置的键盘。实现步骤如下:
与全局键盘类似,创建或使用预制体添加输入框,为其添加 XR Keyboard Display 组件


运行应用程序,初始状态下键盘是可见的。点击输入框可以正常使用键盘进行输入,按 Enter 完成输入后键盘会隐藏。再次点击输入框可以重新显示键盘。与全局键盘不同,世界空间键盘不会根据用户位置变化而移动,始终保持在固定位置。

空间键盘 XRI Spatial Keyboard 预制体上挂载了三个核心组件,它们共同实现了键盘功能:
这是实现空间键盘功能的核心组件,主要负责键盘端的输入管理。
重要参数(部分):

键盘布局配置允许自定义按键显示和输出字符。例如,可以修改数字 “5” 键的显示字符和输出字符,实现自定义键盘布局。
负责实现输入框与键盘的关联,处理输入过程中的交互行为。
重要参数(部分):

Monitor Input Field Character Limit 参数需要结合输入框 Input Field 的 Character Limit 参数实现字符数量限制功能。例如设置限制为 8 个字符,当达到上限时,文本框将不再接受输入。
该组件用于优化键盘按键的渲染性能,实现类似批处理的效果,减少 Draw Call 数量,提高渲染效率。这种优化仅在程序运行时生效。

Spatial Keyboard 只是 VR 项目中实现字符输入的一种方式之一,各 VR 平台也有自己的解决方案。例如,Meta 平台提供了 Virtual Keyboard 功能,专门针对 Quest 设备的项目开发可以参考使用该方案。
需要注意的是,目前通过 SDK 实现的这些键盘输入方案普遍不支持中文输入。如需实现中文字符输入,需要使用额外的开发手段进行扩展。
键盘预制体上还挂载了一些传统的 Interaction Toolkit 组件,如 XR Grab Interactable、XR General Grab Transformer 等,协同实现了键盘的抓取和交互功能。
本文详细介绍了 Unity XR Interaction Toolkit 中空间键盘功能的两种实现方式:全局空间键盘和世界空间键盘,并分析了相关核心组件的功能和参数设置。通过本教程,开发者可以在自己的 VR 应用中快速实现文本输入功能,提升用户体验。
掌握空间键盘的实现方法,能够为 VR 应用增添更多交互可能性,如用户名输入、搜索功能、聊天系统等,使 VR 应用的功能更加完善。
本文首发于微信公众号「XR技术研习社」:阅读原文