0
点赞
收藏
分享

微信扫一扫

Unity开发OpenXR |(三)使用 OpenXR 添加一个运动系统,实现传送、抓取功能 的简单VR示例场景 的全过程详细教程

cwq聖泉寒江2020 2022-02-21 阅读 113

请添加图片描述

文章目录


📢前言

  • 在上一篇文章中我们对怎样使用OpenXR创建一个基本的使用案例已经做了一个详细的介绍。
  • OpenXR | 使用 OpenXR 制作一款简单VR示例场景 的全过程详细教程,包含两个实战案例。
  • 那本篇文章就在此基础上继续实现一些其他的功能,比如运动系统,抓取物体等功能的实现。

🎬OpenXR | 使用 OpenXR 添加一个运动系统,实现传送、抓取功能 的简单VR示例场景 的全过程详细教程

🏳️‍🌈新建项目,导入OpenXR、XR Interaction Toolkit等依赖包

首先还是老样子,打开UnityHub新建一个项目,这里就不多说了,直接来看怎样操作。

还是需要导入相关的依赖包,不会的可以再来参考一下下面这篇文中的内容:
OpenXR | 使用 OpenXR 制作一款简单VR示例场景 的全过程详细教程,包含两个实战案例。

将依赖包都导入之后,并且添加上XR Origin的基本配置之后 界面是下面这样的:
在这里插入图片描述


🏳️‍🌈添加一个运动系统

在上面的内容中我们已经添加了XR Origin,接下来再添加一个运动系统,XR -> Locomotion System(Action-based)

这里要注意,一定要添加带有**(Action-based)**标签的,如果发现了有使用 Device-based 标签的,那说明它使用了旧的输入系统。
在这里插入图片描述
然后将 Locomotion System(Action-based) 的坐标初始化。

可以看到监视器面板中的Snap Turn Provider中已经配置好了我们的左右手控制器,这是我们在配置默认输入动作的时候做的事情。
在这里插入图片描述


🏳️‍🌈添加一个传送区域效果

添加传送区域有两种方式,下面一起来看一下。

第一种方式:
可以在层级面板中点击 XR -> Teleportation Area,添加一个传送门配置
在这里插入图片描述
这个 Teleportation Area物体 上的 Teleportation Area脚本 就是用来控制传送区域的。

第二种方式:
直接在我们自己创建的Plane平面上添加** Teleportation Area脚本**,这样可以使我们在这个平面上的任何地方移动。
在这里插入图片描述


🏳️‍🌈添加材质,简单测试运动系统的效果

新建一个文件夹,创建一个Material材质,简单换个颜色并将它拖到地面上,为了一会更好的区分控制器发出的射线变化。
在这里插入图片描述
然后打包这个场景到真机测试一下,怎样打包就不多说了,添加上场景,设置好包名类名点击Build就好了。
在这里插入图片描述
现在就可以进行一个简单的移动,通过使用控制器点击地面上的不同位置来实现传送换位置,也可以通过大拇指的摇杆来控制方向的旋转

测试效果如下:
在这里插入图片描述
请添加图片描述


🏳️‍🌈添加连续性动作的运动系统

目前虽然已经可以进行一个简单的传送移动了,但是还不够真实,所以我们需要在进行一些操作实现更真实的运动系统。

Locomotion System物体上的 传送区域和快速转身 的两个脚本取消激活,如下图所示:
在这里插入图片描述
然后添加上连续动作和连续回合的两个脚本 Continuous Move Provider (Action-based)Continuous Turn Provider (Action-based)
在这里插入图片描述
然后我们给连续动作取消右手手柄,连续回合取消左手手柄,如下图所示:
在这里插入图片描述
然后再进行打包测试,看一下效果
请添加图片描述

从测试效果可以发现,右手是控制方向旋转的,右手大拇指按住控制器摇杆之后方向就开始发生变化。

而左手是控制位置的,左手大拇指拖动控制器摇杆之后位置会发生变化,可以进行前进后退左右移动等行为。

简单来说就跟第一人称射击游戏一样,左手负责前后左右移动,右手负责拖动视角变化。


🏳️‍🌈使用控制器抓取物体的案例

接下来我们在场景中添加一个简单的小方块,用于控制器抓取测试使用。

如果想要设备对这个小方块进行抓取,那么要给它添加上 XR Grab Interractable,他会自动添加一个 刚体Rigidbody组件
在这里插入图片描述

如果想让这个小方块尽可能的平稳,那就把Rigidbody的碰撞检测设置成连续动态碰撞。如下图所示:
在这里插入图片描述
然后再改一下 XR Grab Interractable脚本 配置的平滑类型 Smooth PositionSmooth Rotation
在这里插入图片描述
勾选这个选项可以让我们抓取物体时的运动变得更加平滑,但是会更消耗性能,也可以自定义平滑程度。

然后更改脚本中的Movement Type选项,有三个选项。

  • 第一个是速度跟踪状态,不能穿过墙壁之类的状态,更符合现实
  • 第二个是运动学状态,没有第一种那样写实,也比瞬移要慢一点,算是两者的中介形式了。
  • 第三个是瞬时跟踪,也就是瞬间移动,抓取时物体会瞬移过来。

这里我们就选择第一种速度跟踪进行测试了。
在这里插入图片描述
然后也可以照葫芦画瓢的多添加几个不同配置的物体到场景中,别忘记添加XR Grab Interractable脚本就行。
在这里插入图片描述
接下来再进行打包到真机进行测试。
在这里插入图片描述
请添加图片描述

这样我们就可以实现使用手柄控制器抓取物体了,只需要添加一个脚本就可以了,非常简单。

但是我在测试的时候还发现一个小问题,当我们抓取物体之后进行位置移动或者方向旋转的时候,手中的物体也在跟着旋转。
这在大多数情况下是不需要的,但是默认是这样设置的,我们可以进行更改。

打开 层级面板的 XR Origin 中的左右手控制器,取消勾选 XR Ray Interactor脚本中的Anchor Contro选项即可。
这样在使用的时候,手中抓取的物体就不会跟随我们旋转了,只会牢牢的抓在我们手中。
在这里插入图片描述


💬总结

  • 本篇文章对OpenXR中的运动系统、传送和抓取等功能做了一个比较详细的教程。
  • 而且打包到Oculus Quest2真机测试都是没有任何问题的。
  • 如果对于OpenXR的环境集成配置还不熟悉的可以参考这篇文章:
  • OpenXR | (二)使用 OpenXR 制作一款简单VR示例场景 的全过程详细教程,包含两个实战案例。
  • 如果把这两篇文章中的内容都吃透的话,那么对于使用OpenXR上手开发VR应用应该是没什么太大的问题了!
  • 但是这两篇也只能算是对OpenXR入门了,其中 新的输入系统 和 API 等等都要慢慢熟悉。
  • 后面还会继续更新关于OpenXR相关的技术文章,毕竟是作为一个VR开发者必备的内容了。
  • 对这方面感兴趣的记得关注博主 并 订阅该专栏哦!

专栏推广

Unity专栏简介
以Unity引擎为基础,介绍关于Unity的各种文章学习,共同进步!Unity是一款跨平台的专业游戏引擎,用它创建的游戏可以在PC端、移动设备等常见平台上运行。

资料白嫖,技术互助

学习路线指引(点击解锁)知识定位人群定位
🧡 Unity系统学习专栏 🧡入门级本专栏从Unity入门开始学习,快速达到Unity的入门水平
💛 Unity实战类项目 💛进阶级计划制作Unity的 100个实战案例!助你进入Unity世界,争取做最全的Unity原创博客大全。
❤️ 游戏制作专栏 ❤️ 难度偏高分享学习一些Unity成品的游戏Demo和其他语言的小游戏!
💚 游戏爱好者八万人社区💚 互助/吹水八万人游戏爱好者社区,聊天互助,白嫖奖品
💙 Python零基础到入门 💙 Python初学者针对没有经过系统学习的小伙伴,核心目的就是让我们能够快速学习Python的知识以达到入门

温馨提示: 点击下面卡片可以获取更多编程知识,包括各种语言学习资料,上千套PPT模板和各种游戏源码素材等等资料。更多内容可自行查看哦!
请添加图片描述

举报

相关推荐

0 条评论