取消

Unity OpenVR 虚拟现实入门五:通过传送控制玩家移动

在 Unity 的帮助下,虚拟现实应用的开发非常容易。不过国内竟然还是没有什么教程,所以这里就来一点入门的,适合新手。

本文将基于第四篇的简单场景,通过传送的方式控制玩家移动。


系列博客:

搭建一个简单的场景

基于之前第四篇中我们添加的“Player”和控制器,我们这里简单打建一个场景。于是我们添加一个 3D 物体——“平面”——这足够简单。当然这不是必要的,只是会让我们后续的玩家移动看起来是踩在地面上,而不是悬在空中。

创建平面
▲ 创建平面

创建完记得在检查器里面将平面的位置设置到 (0,0,0)。

设置平面的位置
▲ 设置平面的位置

创建传送动作

在资源中定位到“SteamVR”->“InteractionSystem”->“Teleport”->“Prefabs”,找到“Teleporting”然后将它拖拽到场景中。

只需要运行场景,你就能发现在推动手柄摇杆时就能传送了:

传送
▲ 传送

不过,我们只能做出这个传送的动作,而不会真正地传送出去,因为我们还没有传送的“目的地”。

创建传送目的地

依然是在“SteamVR”->“InteractionSystem”->“Teleport”->“Prefabs”中。这次,我们拖拽“TeleportPoint”进入场景。

拖拽 TeleportPoint 进入场景
▲ 拖拽 TeleportPoint 进入场景

我们拖拽多个这样的传送目的地到场景中,运行看看效果。

可传送到目的地
可传送到目的地

在这张图片中,白色的地面让传送点很难看清,我们随便找一个非白色的材质拖拽到平面上。这里我直接使用“SteamVR”->“InteractionSystem”->“Teleport”->“Textures”里的“TeleportArea”材质(偷懒)。

使用非白色的材质

创建传送目的区域

不过,只是传送到某个点的话,更像是看某场全景电影。要实现更加沉浸的体验,我们需要能让场景中的大多数地面都可被传送。

创建一个新的平面,同样将位置调整到 (0,0,0),再调整大小,将其与之前的白色“地面”重叠在一起。不过这个新的平面,我们要添加一个“TeleportArea”的脚本。

添加脚本 Teleport Area
▲ 添加脚本 Teleport Area

运行看看,发现并不能传送(如下图):

无法传送
无法传送

这是因为,我们创建的这两的平面完全重叠了。我们只需要将“TeleportArea”那个平面的 Y 坐标稍微向上移动一点点(例如 0.1 个单位)就可以了。

Y 移动一点点
▲ Y 移动一点点

可以传送了
▲ 可以传送了

本文会经常更新,请阅读原文: https://blog.walterlv.com/post/unity-openvr-starting-5.html ,以避免陈旧错误知识的误导,同时有更好的阅读体验。

知识共享许可协议

本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。欢迎转载、使用、重新发布,但务必保留文章署名 吕毅 (包含链接: https://blog.walterlv.com ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请 与我联系 ([email protected])

登录 GitHub 账号进行评论