输入模拟服务 — MRTK2
借助 MRTK 的输入模拟,你可以在 Unity 编辑器中测试各种类型的交互,而无需生成并部署到设备。 这使你可以在设计和开发过程中快速迭代你的想法。 使用键盘和鼠标组合来控制模拟输入。
输入模拟服务模拟可能在 Unity 编辑器中不可用的设备和平台的行为。 示例包括:
- HoloLens 或 VR 设备头部跟踪
- HoloLens 手势
- HoloLens 2 关节手跟踪
- HoloLens 2 眼部跟踪
- VR 设备控制器
警告
使用 Unity 的 XR 全息模拟的模拟模式为“在编辑器中模拟”时无效。 Unity 的编辑器内模拟将控制 MRTK 的输入模拟。 为了使用 MRTK 输入模拟服务,需要将 XR 全息模拟的模拟模式设置为“无”
如何使用 MRTK 输入模拟
默认情况下,MRTK 附带的配置文件中会启用输入模拟。 只需单击“播放”按钮即可运行输入模拟支持的场景。
- 按 W、A、S、D、Q、E 键可移动摄像头。
- 在按住鼠标右键的同时移动鼠标可以四处浏览。
- 按空格键(右手)或左 Shift 键(左手)以显示模拟的双手
- 按 T 或 Y 键以将模拟的双手保持在视野中
- 要旋转模拟的手部,请按住 Ctrl 键并移动鼠标
在编辑器中输入模拟备忘单
在 HandInteractionExamples 场景中按左 Ctrl + H,以显示包含输入模拟控件的备忘单。
启用输入模拟服务
在输入系统数据提供程序配置下,可通过以下方式配置输入模拟服务。
- “类型”必须是 Microsoft.MixedReality.Toolkit.Input > InputSimulationService。
- 默认情况下,支持的平台包含所有编辑器平台,因为该服务使用键盘和鼠标输入。
注意
通过更改“支持的平台”属性以包括所需的目标,可以在其他平台终结点(例如独立)上使用输入模拟服务。
相机控件
头移动可由输入模拟服务模拟。
旋转相机
- 将鼠标悬停在视区编辑器窗口上。 如果按下按钮不起作用,可能需要单击窗口使其获得输入焦点。
- 按住鼠标查看按钮(默认:鼠标右键)。
- 在视区窗口中移动鼠标以旋转相机。
- 使用滚轮围绕视野方向旋转相机。
可通过更改输入模拟配置文件中的“鼠标查看速度”设置来配置相机旋转速度。
或者,使用“水平查看”/“垂直查看”轴旋转相机(默认:游戏控制器右摇杆)。
移动摄像头
使用“水平移动”/“垂直移动”轴移动相机(默认值:WASD 键或游戏控制器左摇杆)。
也可以在工具窗口中明确设置相机位置和旋转角度。 可以使用“重置”按钮将相机重置为默认设置。
控制器模拟
输入模拟支持模拟控制器设备(即运动控制器和手)。 这些虚拟控制器可以与任何支持常规控制器的对象交互,例如按钮或可抓取对象。
控制器模拟模式
在输入模拟工具窗口中,“默认控制器模拟模式”设置在三个不同的输入模型之间切换。 也可以在输入模拟配置文件中设置此默认模式。
关节手:使用关节位置数据模拟完全关节化手部设备。
模拟 HoloLens 2 交互模型。
在这种模式下可以模拟基于手的精确定位或使用触摸的交互。
手势:使用隔空敲击和基本手势模拟简化的手部模型。
模拟 HoloLens 交互模型。
使用凝视指针控制焦点。 隔空敲击手势用于与按钮交互。
运动控制器:模拟与 VR 头戴显示设备一起使用的运动控制器,其工作方式类似于与关节手的交互。
使用控制器交互模型模拟 VR 头戴显示设备。
通过键盘和鼠标输入模拟触发器、抓取和菜单键。
模拟控制器移动
按住左/右控制器操作键(默认:左 Shift 用于左控制器,空格键用于右控制器)以控制任一控制器。 按下操作键时,控制器将出现在视区中。 一旦松开操作键,控制器将在短暂的“控制器隐藏超时”后消失。
可以在输入模拟工具窗口中或通过按切换左右控制器键(默认:T 代表左,Y 代表右)来打开和冻结相对于相机的控制器。 再次按切换键可再次隐藏控制器。 要操作控制器,需要按住左/右控制器操作键。 双击左/右控制器操作键也可以打开/关闭控制器。
鼠标移动将在视图平面中移动控制器。 可以使用鼠标滚轮将控制器靠近或远离摄像机。
若要使用鼠标旋转控制器,请同时按住左/右控制器操作键(左 Shift 或空格键)和控制器旋转按钮(默认:左 Ctrl 按钮),然后移动鼠标以旋转控制器。 可以通过更改输入模拟配置文件中的“鼠标控制器旋转速度”设置来配置控制器旋转速度。
也可以在输入模拟工具窗口中更改所有手部位置,包括将手部重置为默认值。
其他配置文件设置
- 控制器深度乘数:控制鼠标滚轮深度移动的灵敏度。 数字越大,控制器缩放速度就越快。
- 默认控制器距离是控制器与相机之间的初始距离。 单击“重置”按钮控制器也会将控制器放置在此段距离的地方。
- 控制器抖动量向控制器添加随机运动。 此功能可用于在设备上模拟不准确的控制器跟踪,并确保交互在有噪声的输入下也能生效。
手势
还可以模拟捏、抓、戳等手势。
使用左/右控制器操作键(左 Shift 或空格键)启用手部控制
进行操作时,按住鼠标按钮以执行手势。
可以映射每个鼠标按钮以使用“左/中/右鼠标手势”设置将手形转换为不同的手势。 默认手势是没有按下按钮时手的形状。
注意
捏合手势是此时唯一可执行“选择”操作的手势。
单手操作
- 按住左/右控制器操作键(左 Shift 或空格键)
- 指向对象
- 按住鼠标按钮以进行捏合
- 使用鼠标移动对象
- 松开鼠标按钮可停止交互
双手操作
双手同时操纵对象时,推荐使用持久手部模式。
- 按切换键 (T/Y) 可开启双手操作。
- 一次操作一只手:
- 按住空格键可控制右手
- 将手移动到要抓取对象的位置
- 按鼠标左键可激活捏合手势。
- 松开空格键可停止控制右手。 手将被冻结在原地并被锁定为捏合手势,因为手不再进行操作。
- 用另一只手重复这个过程,在第二个位置抓住同一个物体。
- 由于两只手都在抓着同一个物体,因此你可以移动它们中的任何一个来执行双手操作。
GGV(凝视、手势和语音)交互
默认情况下,GGV 交互在编辑器中启用,在场景中没有关节手。
- 旋转相机以将凝视光标指向可交互对象(鼠标右键)
- 单击并按住鼠标左键进行交互
- 再次旋转相机以操作对象
可以关闭此功能,方法是切换输入模拟配置文件中的“是否启用手部自由输入”选项。
此外,还可以使用模拟手部进行 GGV 交互
- 通过在输入模拟配置文件中将“手部模拟模式”切换为“手势”来启用 GGV 模拟
- 旋转相机以将凝视光标指向可交互对象(鼠标右键)
- 按住空格键可控制右手
- 单击并按住鼠标左键进行交互
- 使用鼠标移动对象
- 松开鼠标按钮可停止交互
引发传送事件
要在输入模拟中触发传送事件,请在输入模拟配置文件中配置手势设置,以便一个执行“传送开始”手势,而另一个执行“传送结束”手势。 “传送开始”手势将调出传送指针,而“传送结束”手势将完成传送动作并移动用户。
结果传送的 y 位置取决于相机沿 y 轴的位移。 在编辑器中,默认值为 0,因此请使用 Q 和 E 键将其调整到合适的高度。
运动控制器交互
模拟运动控制器的操作方式与关节手相同。 交互模型类似于关节手的远交互,触发、抓取和菜单键分别映射到鼠标左键、G 和 M 键。
眼动追踪
可通过选中输入模拟配置文件中的“模拟眼睛位置”选项来启用“眼部跟踪模拟”。 这不应该与 GGV 或运动控制器风格的交互一起使用(因此确保“默认控制器模拟模式”设置为“关节手”)。
输入模拟工具窗口
从“混合现实”>“工具包”>“实用程序”>“输入模拟”菜单启用输入模拟工具窗口。 可以通过此窗口来访问播放模式期间输入模拟的状态。
视区按钮(可选)
可以在“指示器预制件”下的输入模拟配置文件中指定用于控制基本手部放置的编辑器内按钮的预制件。 这是一个可选的实用程序,可以在输入模拟工具窗口中访问相同的功能。
注意
视区指示器默认是禁用的,因为目前有时会干扰 Unity UI 交互。 请参阅问题 #6106。 若要启用,请将 InputSimulationIndicators 预制件添加到“指示器预制件”。
手形图标显示模拟的手部的状态:
- 不跟踪手部。 单击可启用手部。
- 跟踪手部,但手部不受用户控制。 单击以隐藏手。
- 跟踪手部,且手部受用户控制。 单击以隐藏手。
- 单击以将手部重置为默认位置。