文章目录
📢前言
- 在上一篇文章中我们对怎样使用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 Position和 Smooth 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模板和各种游戏源码素材等等资料。更多内容可自行查看哦!