Unity之OpenXR+XR Interaction Toolkit实现 移动和转向

一.前言

我们知道,在VR游戏中,我们除了可以通过传送来移动之外,还可以通过手柄的遥感进行移动,那么接下来,我们就介绍一下如果通过XR Interaction Toolkit来实现遥感控制任务移动和旋转

二.准备工作

我们需要准备好Unity2021工程和环境配置
有了前文:Unity之OpenXR+XR Interaction Toolkit基本配置的介绍,我们就不在详细说明这些了,大家自行复习。

流程简述:
我们新建一个3D(URP)工程
然后通过PackageManager安装XR Interaction ToolKit插件。
配置好XR Interaction Toolkit的Preset
新建一个3D场景

准备工作完毕
在这里插入图片描述

三.瞬间转向

我们通过菜单GameObject->XR->Locomotion System创建一个LocomotionSystem位移系统
在这里插入图片描述
创建完毕后,我们可以看到Locomotion System的对象上有3个组件:
在这里插入图片描述
三个组件分别是:
LocomotionSystem:用于运动提供者xxxxProvider控制对 XR Origin 的访问。XR Origin运行自动赋值
TeleportationProvider:传送提供者,负责根据用户请求将XR Origin传送到指定为止。
SnapTurnProvider:旋转提供者,允许用户使用输入系统动作的2D轴输入来控制人物XR Origin的旋转。

没错,我们的目的就是要使用VR手柄的2D轴来控制人物的旋转,正好使用SnapTurnProvider组件即可。
我们可以看到它有两个属性分别是:LeftHandSnapTurnAction和RightHandSnapTurnAction,这两个属性就是设置用于旋转的InputSystem。我们只赋值右手的Action即可,因为左手的遥感轴还要用于人物的移动。
如下图所示:
在这里插入图片描述
运行游戏,我们就会发现有手柄已经可以控制人物的旋转了。每次旋转角度是45度。这个角度我们可以通过修改SnapTurnProvider的Turn Amount来调节
其他参数:
Turn Amount:每次旋转角度
Debounce Time:两次旋转的等待事件
EnableTurnLeftRight:是否启用左转和右转
EnableTurnAround:启用180度急转弯
DelayTime:初始化输入系统后的第一个延迟

四.持续转向

刚才我们使用SnapTurnProvider是每次旋转一个固定角度,如果我们想平滑的持续转向,那么可以把SnapTurnProvider替换为ContinueTurnProvider,如下图所示:
我们同样勾选RightHandTurnAction并赋值Action
Turn Speed:持续转向的速度
在这里插入图片描述
注意:这种转向方式,非常容易使人眩晕,谨慎使用。

五.移动

有了上面的旋转提供者Provider,我们很容易举一反三,是不是还有移动提供者Provider,没错,XR Interaction Toolkit给我们提供了Continue Move Provider组件,帮助我们实现移动的功能。
我们同样在LocomotionSystem游戏对象上面添加ContinueMoveProvider组件,并且选中LeftHandMoveAction给左手设置Action,通过左手的遥感控制人物移动。
如下图所示:
在这里插入图片描述
其他参数:
Move Speed:向前移动的速度,以每秒为单位
Enable Strafe:控制是否启用横向移动。
Enable Fly:控制是否启用飞行(无约束运动)。这会覆盖useGravity。
Use Gravity:在使用CharacterController时重力是否影响此提供者。仅在enableFly为false时适用
Gravity Appliction Mode:控制重力何时开始生效。
ForwardSource:定义前向的源转换。

好了,运行游戏,我们就可以使用左手控制移动,右手控制旋转了。

六.Character Controller

虽然目前我们的人物是可以移动和旋转了,但是人物和场景物体之间是没有碰撞的,如果我们想实现人物和场景物体发生碰撞,做到不穿透模型,我们可以尝试给XR Origin添加Character Controller。
Character Controlle是Unity原生的一个角色控制器组件,类似与碰撞+刚体。是Unity专门为了开发者制作第一人称控制提供的。我们添加到
如下图所示:
在这里插入图片描述
这样我们的人物移动时就不会穿透场景模型了。
在这里插入图片描述

七.Character Controller动态高度

虽然我们给XR Origin添加了Character Controller,但是Character Controller的高度是固定不变的,但我们在XR世界中是可以下蹲和站立的,所以这时Character Controller的高度显然就不准确了,好在XR interaction Toolkit给我们提供了Character Controller Driver组件,允许我们根据头盔的高度动态调节Character Controller的高度。
我们把Character Controller Driver组件添加到LocomotionSystem上面即可,它会自动获取当前游戏对象上的MoveProvider。当然,也可以提前给LocomotionProvider赋值Continue Move Provider组件。注意,不要拖拽整个Locomotion System对象,因为LocomotionSystem上面有好几个Provider,这里必须指定为Move Provider才行。
如下图所示:
在这里插入图片描述
注意,Character Controller Driver更新Character Controller的高度不是特别及时,只有在人物位移时才会刷新Character Controller的高度。

猜你喜欢

转载自blog.csdn.net/qq563129582/article/details/130397069