Interaction Toolkit 空间键盘(Spatial Keyboard)功能的实现

PUBLISHED ON 2025年3月23日 / 9 MIN READ — XR

在 VR 应用开发中,文本输入是一个常见需求,而 Unity 的 Interaction Toolkit 提供了空间键盘功能,使开发者能够快速实现这一功能。本文将详细介绍如何在 Unity XR 项目中实现两种形态的空间键盘:全局空间键盘和世界空间键盘。

准备工作

在开始实现空间键盘功能前,需要先导入相关资源包并解决依赖问题。

导入 Spatial Keyboard 资源包

首先确保已安装 Unity XR Interaction Toolkit,然后进行以下操作:

  1. 打开 Package Manager
  2. 找到 Interaction Toolkit
  3. 在 Samples 标签页下找到 Spatial Keyboard
  4. 点击 Import 导入资源包

Package Manager 的 Samples 列表选中 XR Interaction Toolkit,右侧找到 Spatial Keyboard 示例并点击 Import

导入过程中会提示对 TextMesh Pro 的依赖,这是因为键盘上的文字是通过 TextMesh Pro 呈现的。

解决版本依赖问题

初次导入后可能会遇到版本依赖问题。如果运行应用程序时出现与 KeyboardOptimizer.cs 相关的报错,如下图所示:

Console 中的编译错误:KeyboardOptimizer.cs(284,20) error CS0246

此时需要升级 TextMesh Pro 插件:

  1. 打开 Package Manager
  2. 切换到 Unity Registry
  3. 找到 TextMesh Pro
  4. 点击 Update 升级到较新版本(如从 3.0.7 升级到 3.0.9)

Package Manager 中 TextMesh Pro 的详情页,右上角是 Update to 3.0.9 按钮

全局空间键盘的实现

全局空间键盘是指可以跟随用户位置动态生成的键盘。实现步骤如下:

步骤 1:添加键盘管理器

有两种方式添加键盘管理器:

方式一:手动添加组件

  • 创建空游戏对象
  • 添加 Global Non Native Keyboard 组件
  • 手动设置 Keyboard Prefab 和 Keyboard Offset 参数

方式二:使用预制体(推荐)

  • 在 Project 窗口搜索 “keyboard”
  • 找到 “XR Global Keyboard Manager” 预制体
  • 将其拖拽到场景中

Project 窗口搜索 keyboa 的结果,选中 XRI Global Keyboard Manager 预制体,右侧 Inspector 显示它挂载的 Global Non Native Keyboard 组件

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

Global Non Native Keyboard 组件的参数:Keyboard Prefab 指向 XRI Spatial Keyboard,Keyboard Offset 为 X0 Y-0.35 Z0.25

步骤 2:添加输入框 Input Field

同样有两种方式:

方式一:手动创建

  • 右键选择 UI > Input Field - TextMesh Pro
  • 添加 XR Keyboard Display 组件
  • 设置 Input Field 参数为当前输入框

方式二:使用预制体

  • 从 Samples/Spatial Keyboard/Prefabs 中找到 “Input Field Global Keyboard”
  • 将其拖拽到场景中

Spatial Keyboard 示例的 Prefabs 目录,其中的 Input Field Global Keyboard 预制体被红框标出

注意:XR Keyboard Display 组件是实现输入框与键盘关联的核心组件。在使用全局键盘时,不要勾选 “Use Scene Keyboard” 选项。

效果演示:跟随用户的全局键盘

运行应用程序,移动到输入框前方,使用射线点击输入框,即可激活键盘并进行输入。输入完成后点击 Enter 键提交,键盘会自动消失。用户还可以抓取键盘并调整其位置,避免遮挡视线。

全局空间键盘的运行效果:输入框悬浮在场景中,键盘出现在用户身前,按键上高亮显示当前输入

世界空间键盘实现

世界空间键盘是固定在场景特定位置的键盘。实现步骤如下:

步骤 1:添加输入框

与全局键盘类似,创建或使用预制体添加输入框,为其添加 XR Keyboard Display 组件

步骤 2:放置空间键盘

  • 在 Project 窗口中找到名称为 XRI Spatial Keyboard 的预制体
  • 将其拖拽到场景中
  • 调整键盘的位置和角度,使其与输入框位置合理

场景视图中的 XRI Spatial Keyboard 预制体实例,摆放在输入框下方

步骤 3:关联输入框与键盘

  • 选择输入框 Input Field - TextMesh Pro
  • 在 XR Keyboard Display 组件中勾选 “Use Scene Keyboard” 参数
  • 将场景中的键盘预制体实例指定到 Keyboard 参数

Inspector 里的 XR Keyboard Display 组件,勾选 Use Scene Keyboard 后,Keyboard 参数指向场景中的 XRI Spatial Keyboard

效果演示:固定在场景中的键盘

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

世界空间键盘的运行效果:键盘固定在场景中的位置,输入框显示已输入的内容

空间键盘核心组件解析

空间键盘 XRI Spatial Keyboard 预制体上挂载了三个核心组件,它们共同实现了键盘功能:

XR Keyboard 组件

这是实现空间键盘功能的核心组件,主要负责键盘端的输入管理。

重要参数(部分):

  • Submit On Enter:按回车键提交内容
  • Close On Submit:提交后自动关闭键盘
  • Double Click Interval:判定双击行为的时间间隔
  • Subset Layout:键盘布局配置

XR Keyboard 组件的参数列表:Submit On Enter、Close On Submit、Double Click Interval 等

键盘布局配置允许自定义按键显示和输出字符。例如,可以修改数字 “5” 键的显示字符和输出字符,实现自定义键盘布局。

Keyboard Display 组件

负责实现输入框与键盘的关联,处理输入过程中的交互行为。

重要参数(部分):

  • Input Field:键盘输入时关联的输入框
  • Update On Key Press:按键按下时更新输入字符
  • Always Observe Keyboard:是否持续监听键盘输入
  • Monitor Input Field Character Limit:是否监控字符数限制

XR Keyboard Display 组件的参数列表,以及底部的 Keyboard Display Events 事件回调

Monitor Input Field Character Limit 参数需要结合输入框 Input Field 的 Character Limit 参数实现字符数量限制功能。例如设置限制为 8 个字符,当达到上限时,文本框将不再接受输入。

Keyboard Optimizer 组件

该组件用于优化键盘按键的渲染性能,实现类似批处理的效果,减少 Draw Call 数量,提高渲染效率。这种优化仅在程序运行时生效。

Keyboard Optimizer 组件的参数,面板下方提示 Optimization is only available during runtime

补充说明

平台兼容性

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技术研习社」:阅读原文