跳跃功能是 VR 应用程序尤其是 VR 游戏中常见的移动方式。在 XR Interaction Toolkit
新版本(3.1.1)中,已经内置了这项功能,大大简化了开发流程。本文将详细介绍如何使用和配置这一功能,包括组件参数调整和按键重新绑定等内容。
本文主要内容:
- 介绍实现跳跃功能的Jump Provider
Jump Provider组件 - 如何禁用跳跃功能
- 如何将跳跃功能绑定到其他按键上
跳跃功能概述
在 Interaction Toolkit 新版本中,如果使用新版本中的XROrigin预制体进行场景初始化,跳跃功能会默认集成在预制体中,开发者无需手动实现,程序运行时,通过点击右手手柄控制器的 A 键即可实现跳跃。
跳跃功能的实现结构
要了解 Interaction Toolkit 中跳跃功能的实现,首先需要了解相关游戏对象的结构。
在游戏对象 XROrigin 下的 Locomotion 中,包含了一个名为 Jump 的子物体,在其上挂载了一个名为 Jump Provider 的组件,这是实现跳跃功能的主要组件。
值得注意的是,跳跃功能并不仅凭Jump Provider实现,在 Interaction Toolkit 的移动架构中,各种移动形式不仅需要各自的 Provider ,还需要一个全局管理角色 Locomotion Mediator 来管理协调不同的移动方式。
如何禁用跳跃功能
并非所有 VR 项目都需要跳跃功能,而默认情况下跳跃功能占用了右手控制器的 A 键。如果项目不需要跳跃或者需要在 A 键上实现其他功能,此时在Hierarchy窗口中将Jump子物体隐藏即可禁用跳跃功能。
Jump Provider 组件主要参数介绍
接下来详细介绍 Jump Provider 组件包含的重要参数。
Transformation Priority(变换优先级)
该参数继承自其父类,其它继承自相同父类的Move、Climb、Gravity 也都具有这样的参数,用于设定当前移动形式的优先级,Locomotion Mediator 据此处理不同移动方式的先后顺序,即在同一帧中,按照此参数设定的优先级顺序依次处理对应形式的移动方式。
参数默认值为 0,数值越低优先级越高。例如,对于跳跃来说,它通常会配合行走使用(即一边行走一边跳跃),通过设定优先级可以让 Locomotion Mediator 决定先处理行走还是先处理跳跃。
如果优先级相同,Locomotion Mediator 会按照默认排序处理,一般情况下,此参数保持默认值即可。
Jump Height(跳跃高度)
该参数表示每次跳跃的最高高度。默认值为 1.25,即每次跳跃最高可达 1.25 米(Unity 中的单位是米)。
在某些项目中,特别是模拟不同重力环境(如月球、火星)的场景中,可以适当调高跳跃高度来反映不同的重力加速度效果。
Jump Forgiveness Window(跳跃缓冲窗口)
Interaction Toolkit 提供的跳跃功能,能够让用户在起跳后至落地前,通过再次按下跳跃键进行二次跳跃,也就是所谓的连跳。
Jump Forgiveness Window 用于设定可以连跳的时间窗口——在第一次跳跃后多长时间内可以进行连跳。超过以上设定的时间,用户将无法进行连续跳跃。
Unlimited In Air Jumps(无限空中跳跃)
勾选该选项后,用户可以在空中无限次地连续跳跃,不断提高自己的高度,该参数更多用于游戏中,如果你的游戏需要这种功能,可以启用它。如果不勾选该参数(默认不勾选),表示能够进行有限次数(包括1次)的连续跳跃,此时会出现以下参数。
In Air Jump Count(空中跳跃次数)
该参数用于设定在空中可以连续跳跃的有限次数。默认值为 1,表示只能在跳跃时间窗口跳跃1次。当设置更多次数如 5 或 10,意味着用户最多可以在空中连跳 5 次或 10 次。
Disable Gravity During Jump(跳跃时禁用重力)
勾选此选项后,跳跃过程中将禁用重力。这会使跳跃过程更加柔和丝滑,用户会感觉到一种类似失重的体验,不勾选则在跳跃中仍然受到重力影响,更接近现实体验。
Variable Height Jump(可变高度跳跃)
勾选此选项后,允许用户在还没达到最大跳跃高度前,通过松开按键来提前结束跳跃。即,用户可以通过按键时长来控制跳跃高度。
勾选此项后会出现三个相关参数:
- Min Jump Hold Time(最小跳跃按键时间):用户需要至少按下跳跃按键多长时间才能起跳。默认为 0.1 秒。
- Max Jump Hold Time(最大跳跃按键时间):用户需要按住跳跃按键多长时间才有可能达到最大跳跃高度。默认为 0.5 秒。
- Early Out Deceleration Speed(提前结束减速速度):当用户在上升过程中松开按键时,上升速度的衰减程度。数值越大,减速越快。
Jump Input(跳跃输入)
该参数用于指定与跳跃相关的输入动作。在 Interaction Toolkit 的新版本中,引入了 Input Reader机制,该参数是其中的一个变体 XRInputButtonReader。要对此类型的参数赋值,需要指定两个动作:一个用于检测动作是否发出,另一个用于读取动作标量值(Scalar Value),对于按键来说,值为 0 或 1。这种双动作设计使开发者可以更精确地控制XR体验中的跳跃机制,既可以简单地检测跳跃指令的触发,又可以根据输入的强度调整跳跃的表现形式。
如何修改跳跃按键绑定
如果项目交互功能需求与跳跃功能按键冲突,比如,项目需要按下A键弹出UI菜单而不是跳跃,此时需要将跳跃功能绑定到其他按键(例如从右手 A 键改为 B 键,或者转移到左手),可执行以下步骤:
- 在Jump Provider 组件上点击 Jump Input 参数值,在 Project 窗口中找到对应的动作
- 双击此动作,打开动作编辑窗口
- 默认的跳跃动作(Action)位于 XRI Right Locomotion 分类下,名称为 Jump
- 找到具体的按键绑定(默认是右手的 Primary Button,即 A 键)
- 在窗口右侧的 Path 绑定中,展开并重新绑定到所需按键(如RightHand Controller下的 Secondary Button,即 B 键)
- 绑定完成后,点击窗口右上角的 Save Asset 按钮保存设置
如果要将跳跃功能绑定到左手手柄控制器上,步骤稍有不同,需要新建动作并完成按键绑定,可执行以下步骤:
- 在动作编辑窗口,Action Maps 栏中找到 XRI Left Locomotion 分类
- 由于左手手柄控制器默认没有 Jump 动作,需要点击右上角加号新建一个动作并命名为 Jump
- 在右侧 Path 绑定设置中选择 XR Controller > XR Controller(Left Hand) > Usage
- 选择所需按键(如 Primary Button,即左手 X 键)
- 绑定完成后点击窗口右上角的Save Asset 按钮保存设置
- 返回 Jump Provider 组件,将 Jump Input 的两个字段都重新指定为刚创建的左手 Jump 动作
值得关注的两个参数
除了在 Inspector 中可见的参数外,Jump Provider 组件还有两个值得关注的重要属性:
- Is Jumping:布尔类型,判断用户是否正在跳跃
- Is Grounded:布尔类型,判断用户是否站在地面上
以上两个属性在开发中非常有用,可以用来实现一些比较常用的交互功能,比如播放落地时音效、通过判断跳跃状态开发特定游戏逻辑等。如下代码所示:
// 获取JumpProvider类的引用
var jumpProvider = GetComponent<JumpProvider>();
// 读取isJumping参数状态
bool isAscending = jumpProvider.isJumping;
// 读取isGrounded参数状态
bool isOnGround = jumpProvider.isGrounded;
总结
本文详细介绍了 XR Interaction Toolkit 中的跳跃功能。作为内置功能,它通过 Jump Provider 组件提供了丰富的参数配置,能够满足各种 VR 游戏和应用的需求。
通过调整参数,开发者可以实现多种跳跃效果,如单次跳跃、连续跳跃、可变高度跳跃等。同时,还可以根据项目需求修改按键绑定或完全禁用跳跃功能。
本文来自《PICO VR 交互开发指南》第67节视频课时。