相关文章推荐
踢足球的火龙果  ·  element-ui ...·  1 年前    · 
忧郁的感冒药  ·  Android app 崩溃 & ...·  2 年前    · 
【新手向】Unity 2020 + SteamVR 2.x 基础知识

【新手向】Unity 2020 + SteamVR 2.x 基础知识

本文将以Unity 2020为编辑器,介绍新版SteamVR的变化、相关操作背后的原理、以及在Unity 2020中使用该插件需要注意的细节,本文内容 部分 来自视频课程 《SteamVR 2.x 交互开发指南》 ,以下。

目录:

  • SteamVR 插件的获取
  • 新版本 SteamVR 2.x 的主要变化
  • 导入 SteamVR 插件
  • 初次运行SteamVR应用程序(自带示例场景)

针对PC VR平台的开发,绕不过去的便是以SteamVR平台为代表的VR设备,尤其是目前国内PC VR设备的现状,无论从采购渠道还是品牌认知度,目前还是以HTC VIVE为主要硬件平台,而HTC VIVE 系列产品均是运行在SteamVR平台之上的。SteamVR 插件是Valve提供给Unity开发者的开发工具,其中包含的Interaction System,是一套脱胎于VR体验应用《The Lab》的交互系统,开发者可以借由这套交互系统,快速开发出常用的VR交互功能。

SteamVR 插件的获取

SteamVR 插件可以分别从Unity Asset Store 和 Github 获取。在Asset Store中,通常只会提供经过广泛测试后相对稳定的最新版本,而在Github中,开发者可以获取该插件自发布以来的所有版本以及即将发布的beta版本。

渠道一:从Asset Store获取

访问网址: https://assetstore.unity.com ,搜索栏输入"steamvr"找到该插件,确保使用Unity ID登录,选择"添加到我的资源",然后点击“在Unity中打开”按钮,由于在Unity 2020中,从Asset Store窗口中进行插件下载和安装的功能被移除,此时将自动在Unity编辑器中打开Package Manager,同时定位到在"My Assets"类目下SteamVR Plugin,点击download按钮等待下载完毕,点击Import按钮进行插件的导入。

图1 Package Manager中的SteamVR插件

渠道二:从Github获取

在Github中搜索"steamvr"或访问网址: github.com/ValveSoftwar ,找到SteamVR 插件的代码仓库。在页面右侧,点击链接“Releases”,进入该插件的版本选择列表。如下图所示:

图2 github中的steamvr plugin

在列表中列出了SteamVR Plugin自发布以来的所有历史版本,开发者可选择所需的版本进行下载。在每个版本介绍的底部,选择.unitypackage文件下载即可。

图3 从Github下载SteamVR Plugin

如果开发的项目需要使用早期的插件版本,比如需要使用SteamVR 1.2.3结合VRTK 3.x进行开发的情况——我们知道VRTK在Asset Store中的最新版本(3.x)并不能与SteamVR Plugin 的最新版本(2.x)搭配使用,所以遇到这种情况,只能从Github中下载SteamVR Plugin的旧版本,同理,对于VRTK来说也适用。

新版本 SteamVR 2.x 的主要变化

在SteamVR Plugin 1.x 推出以后,VR生态发生了很多变化,比较显著的是出现了很多不同类型的VR设备以及控制器。随着越来越多的VR设备推出,控制器类型逐渐趋向于碎片化。每当有新的控制器发布,都会给开发者带来一些额外的工作量——游戏项目需要修改交互代码以适配新的设备。从开发层面上来看,不同的控制器具有不同的键值映射,所以,当现有 VR 应用程序移植到另外一个VR平台的时候,需要针对目标平台进行交互适配。鉴于此,Valve为Unity开发者推出了 SteamVR Plugin 2.x(以下简称SteamVR 2.x),能够使开发者在编程中专注于用户的动作,而不是具体的控制器按键。

SteamVR 2.x 的重要更新是加入了 Input System,所有的用户输入均围绕动作Action展开。推出Input System的目的,是为了更加符合OpenXR的标准。Input System与之前处理用户输入有着显著的不同,使用SteamVR Input System,开发者可以在应用程序之外定义默认的动作并与按键进行绑定,而不需要将输入视为某一特定设备的特定按键。这样新的设备可以快速适配应用程序,无需更改代码。比如,当开发者检测玩家是否抓取某个物体的时候,不是检测Vive控制器的Trigger键或Oculus Touch控制器的Grip键是否被按下,而是检测预定义的”Grab”动作是否为True即可。类似在篮球游戏中玩家预先设置"投篮"动作为键盘或手柄上的哪一个按键一样。基于这种机制,不只能够解决控制器碎片化的问题,也可以快速适配未来发布的设备。

图4 在篮球游戏中设置各种动作对应的按键

值得注意的是,Unity同样引入了一套新的输入系统,以解决跨平台(PC、移动、VR)的问题,同样基于动作的输入。可见,使用动作而不是特定按键的输入来处理用户的交互行为,正在成为一种趋势。读者可结合Unity 的 Input System 来学习这种机制的设计思路,以便于更好的理解 SteamVR 的 Input System。

导入 SteamVR 插件

在Unity Hub中,使用Unity 2020创建一个3D项目,如图5所示:

图5 使用Unity 2020创建项目

在Package Manager的My Assets分类下找到SteamVR Plugin,如图1所示,点击右下角 Import 窗口即可开启导入流程。对于从Github下载的插件,需要在Unity编辑器的Project窗口中选择命令Import Package->Custom Package...进行导入。 在Unity 2020中,插件导入后将默认安装OpenVR XR Plugin工具包 ,如图6所示:

图6 插件导入后自动安装OpenVR XR Plugin 工具包

点击OK按钮后,弹出SteamVR设置窗口,该窗口将检测当前项目设置并列出推荐更改的选项,如下图所示:

图7 SteamVR 设置窗口

开发者可以根据项目需求选择接受或忽略对应设置选项,通常情况下,点击窗口底部的Accept All接受所有建议即可。需要注意的是,即使点击Accept All 按钮,在未来的开发过程中,当项目脚本发生改变时,该设置对话框依然会再次弹出,只是在建议设置列表中,仅显示如上图所示的第一项——Show Unity Splashscreen,并建议关闭。接受该选项的目的是关闭显示Unity的启动画面(Splash Screen),而对于个人版Personal用户来说,该选项并不能在Build Settings中将其禁用,如下图所示:

图8 个人版用户无法在Build Settings中禁用 Unity 启动画面

随着开发的进行,频繁弹出此对话框会一定程度上影响项目开发的连续性,要解决这个问题,可以在Project窗口中搜索"SteamVR_UnitySettingsWindow",找到控制设置窗口显示的脚本,双击使用默认代码编辑器将其打开,在第118行处添加代码,强制设置变量show为false,如下代码段中第1行所示。这样在之后的代码中将因为判断条件不成立而不再显示设置窗口。

show = false;
if (show)