Unity之OpenXR+XR Interaction Toolkit实现 传送

前言

VR中由于走动比较容易头晕,所以基本上玩家移动都是靠传送,这样用户更加直观,传送过去也不会感觉头晕。
好了,那么我们一起来说实现一下OpenXR的传送功能。

二.准备工作

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

流程简述:
我们新建一个3D(URP)工程
然后通过PackageManager安装XR Interaction ToolKit插件。
配置好XR Interaction Toolkit的Preset
新建一个3D空场景,然后创建一个平面作为地面
准备工作完毕

如下图所示:
在这里插入图片描述

创建Localmotion System

通过菜单GameObect->XR->Localmotion System创建一个Locomotion System游戏对象,这个对象非常重要,就是它控制着Origin(XR)的移动。它身上有3个组件。

1.Localmotion System组件
Locomotion System对象用于控制对 XR Origin 的移动。它强制一次只有一个Localmotion Provider可以移动 XR Origin。这是唯一控制对 XR Origin 的访问的地方,不建议使用 Locomotion System 的多个实例驱动单个 XR Origin。

2.Teleportation Provider组件
Teleportation Provider负责根据用户请求将 XR Origin 移动到所需位置。

3.ActionBasedSnapTurnProvider组件,
一个运动Provider,是Locomotion Provider的子类,允许用户使用来自输入系统动作的 2D 轴输入来旋转他们的装备。

创建传送点

传送点有两种:
1.TeleportationArea传送区域
2.Teleportation Anchor传送锚点

Teleportation Area

TeleportationArea传送区域,是一个传送目的地,它可以将用户传送到他们在表面上的指定位置。我们可以通过手柄发射射线然后按下Grab键完成传送。

在这里插入图片描述

Teleportation Anchor

Teleportation Anchor传送锚,是传送目的地,它将用户传送到预定的锚点位置和旋转
在这里插入图片描述

现在我们可以试一下传送效果。
在这里插入图片描述

传送抛物线

我们默认使用的是直线射线,不过XR Interactor Toolkit给我们提供了抛物线和贝塞尔曲线个动能。
我们打开手柄上面的 XR Ray Interactor组件,我们找到Raycast Configeration属性,把LineType修改为Projectile Curve类型即可。下面的抛物线的速度,重力加速度等控制着抛物线的远近和弧度,我们先使用默认的。
在这里插入图片描述
看一下场景传送效果:
在这里插入图片描述

辅助瞄准区域

我们知道射线或者抛物线出去之后,我们对于空间的感受是有误差的,所以需要一个抛物线的辅助瞄准区域,来精确的告诉我们,落点在哪里。XR Toolkit的Stater Assets里面给我们提供了一个禁止传送的标线和一个可传送的标线。我们也可以自己创建一个任意几何体如:Sphere球体,去掉碰撞即可,作为自定义标线。
在这里插入图片描述
创建传送瞄准标线有两种方法;
方法一:通过在HandController上面的XR Interactor Line Visual中设置Reticle和Blocked Reticle,这种方法设置好Reticle瞄准标线后,可以在任意Teleportation Area或者Anchor上面显示。
在这里插入图片描述

方法二:通过在Teleportation Area或者TeleportationAnchor上面配置Custom Reticle(自定义标线)。
这种方法设置的属于当前Area自定义的瞄准标线,只在当前这个Area上面显示。会覆盖XR Interactor Line Visual上面的设置的默认Reticle。
在这里插入图片描述
运行场景,我们可以看到效果如下:
在这里插入图片描述

猜你喜欢

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