SteamVR2.0Unity插件使⽤指南
骨肉相连的做法随着VR⽣态的⽇益增长,以及Valve Knuckles控制器的逐渐完善,SteamVR未来能够提供给⽤户更多的交互⽅式,⽐如⼿指跟踪和⼒反馈。近期,Valve在Unity资源商店中将SteamVR插件更新到了2.0版,XR技术研习社将根据官⽅博客和SDK⽂档对此次更新进⾏介绍,本⽂同时也是《HTC VIVE 交互开发实例教程》第52课备课内容。
以下为本⽂将要涵盖的议题:
毕业实习总结范文1. 概述
2. 重要更新:Input System
3. 动作(Actions)
3.1 ⾻骼输⼊
3.2 振动输出
4. 动作集(Action Sets)
5. SteamVR Input 窗⼝
6. 测试动作
7. 动作绑定
8. 在代码中使⽤动作
9. Interaction System 的变化
二宫和也长泽雅美10. VRTK 是否能够继续结合 SteamVR 2.0 使⽤
1. 概述
三年前,SteamVR SDK for Unity插件的第⼀个版本在Unity资源商店发布,在以后的时间⾥,VR⽣态发⽣了很多变化,⽐较显著的是出现了很多不同类型的控制器,如下图:
随着越来越多的VR设备推出,控制器类型逐渐趋向于碎⽚化。每当有新的控制器发布,都会给开发者带来⼀些额外的⼯作量——游戏项⽬需要修改交互代码以适配新的设备。从开发层⾯上来看,不同的控制器具有不同的键值映射,所以,当现有 VR 应⽤程序移植到另外⼀个VR平台的时候,需要针对⽬标平台进⾏交互适配。鉴于此,V社为Unity开发者推出了 SteamVR Unity Plugin 2.0(以下简称SteamVR 2.0),能够使开发者在编程中专注于⽤户的动作,⽽不是具体的控制器按键。
2. 重要更新:Input System
SteamVR 2.0 的重要更新是加⼊了 Input System。推出Input System的⽬的,是为了更加符合OpenXR标准,以及配合即将正式推出
的Knuckles控制器。⽬前多数主流VR平台均加⼊了OpenXR开放标准,如下图所⽰:
Input System与之前处理⽤户输⼊有显著的不同,使⽤SteamVR Input System,开发⼈员可以在应⽤程序之外定义默认的动作并与按键进⾏绑定,⽽不需要将输⼊视为某⼀特定设备的特定按键。这样新的设备可以快速适配应⽤程序,⽆需更改代码。⽐如,当开发者检测玩家是否抓取某个物体的时候,不是检测Vive控制器的Trigger键或Oculus Touch控制器的Grip键是否被按下,⽽是检测预定义的"Grab"动作是否为True即可。作为开发者,可以在SteamVR中为Grab动作设置默认按键和阈值,当程序运⾏时,也可修改这些数值以满⾜玩家的个⼈偏好。基于这种机制,不光能够解决控制器碎⽚化的问题,也可以快速适配未来发布的设备。
3. 动作(Actions)
Input System 的核⼼概念是动作(Action),基于动作的输⼊系统对于游戏引擎来说更有意义, Unreal⼀直在沿⽤这种⽅案,⽽Unity⽬前在开发中的输⼊系统也将遵循这⼀原则。开发者需要放弃之前关于“按下某个按键发⽣什么事情”的思想,取⽽代之的是使⽤“做出某个动作发⽣什么事情”的思想。
SteamVR 2.0将动作抽象为以下6种类型,简介如下:
Boolean类型的动作代表只有两种状态的动作——True或False,⽐如抓取(Grab)动作,只有抓取或未抓取两种状态,不存在中间状态。在Unity中对应类为SteamVR_Action_Boolean。
Single类型的动作能够返回0~1之间的数值,⽐如 Trigger 键按下到松开的过程。在Unity中对应类为SteamVR_Action_Single。
Vector2类型动作能够返回⼆维数,⽐如Touchpad上的触摸或⼿柄摇杆。使⽤这样的数值能够控制物体在四个⽅向的运动,典型的应⽤时使⽤Touchpad控制⽆⼈机或⼩车的运动。在Unity中对应类为SteamVR_Action_Vector2。
Vector3类型的动作能够返回三维数值,在Unity中对应类为SteamVR_Action_Vector3。
Pose类型的动作表⽰三维空间中的位置和旋转,⼀般⽤于跟踪VR控制器。在Unity中对应类为SteamVR_Action_Pose。
Skeleton类型的动作能够获取⽤户在持握⼿柄控制器时的⼿指关节数据,通过返回数据,结合⼿部渲染模型,能够更加真实的呈现⼿部在虚拟世界的姿态,虽然不及像LeapMotion等设备获取⼿指输⼊那样精确,但是⾜以获得良好的沉浸感。在Unity中对应类为SteamVR_Action_Skeleton。
3.1 ⾻骼输⼊化妆品排行
对于⾻骼输⼊,Knuckles控制器为SteamVR体验带来了⼿指跟踪功能,能够估算⽤户⼿指的位置,然后将数据传递给驱动程序,驱动程序将其对应解析到⼿部模型的31块⾻骼上,从⽽给⽤户带来更好的
手抄报简单又漂亮中秋沉浸式体验。该功能并不是Knuckles所独有,SteamVR还能够为HTC Vive和Oculus Touch这样的设备提供⼿指状态估算,⽐如判断⼿部是否打开,⼿指是否放置在Touchpad上。同时Valve公司还将与Microsoft展开合作,以增加对Windows MR控制器的⽀持。
默认情况下,运⾏Interaction System⽰例场景中能够同时看到⼿部和控制器模型,此外,还有⼀个辅助组件
SteamVR_Behaviour_Skeleton,如下图所⽰。有关该组件的使⽤,可以参考Interaction System的⽰例场景。
3.2 振动输出
以上是介绍的都是输⼊动作,另外,⽬前还有⼀种输出动作——振动,⽤于触发VR控制器上的触觉反馈,调⽤⽅法如下代码所⽰:十一月你好图片
SteamVR_Input._default.outActions.Haptic.Execute(float secondsFromNow, float durationSeconds, float frequency, float amplitude, SteamVR_Input_Sources inp
4. 动作集(Action Sets)
动作通过动作集进⾏逻辑上的分组,以⽅便进⾏组织和管理。在Unity中对应的类为SteamVR_ActionSet。在不同的场景或应⽤程序之间
可以切换使⽤不同的动作集,⽐如,应⽤程序中有⼀个场景是在地球上拾取并投掷物体,⽽另⼀个场景则是在太空中飞⾏,那么这两个场景
可以使⽤不同的动作集。同时,当针对新设备进⾏交互适配时,开发者只需对动作进⾏配置,⽽不必修改项⽬代码。⽐如,使⽤ Vive 控制
器时,定义了⼀个Fire动作,当需要⽀持 Rift Touch 时,只需通过配置Touch控制器上符合 Fire 动作的键值即可。
SteamVR插件默认包含了三套动作集default、platformer、buggy,开发者也可以在SteamVR Input窗⼝中⾃⾏添加或删除动作集。
使⽤组件SteamVR_ActivateActionSetOnLoad可以在场景中⾃动激活和停⽤指定的动作集。对应激活和停⽤的⽅法是在Start()和
OnDestroy()中实现。如下图所⽰:
5. SteamVR Input 窗⼝
在Unity编辑器中,使⽤ Window > SteamVR Input 命令,打开SteamVR Input 窗⼝。在SteamVR 2.0中,使⽤SteamVR Input窗⼝
作为⼊⼝,对所有动作进⾏管理。初次导⼊SteamVR 2.0并运⾏程序时,会弹出⼀个对话框,提⽰没
有actions.json⽂件,并询问是否要
使⽤默认值。如下图所⽰:
选择Yes,会将默认的actions.json⽂件以及⼀些常见的控制器相关绑定⽂件复制到当前项⽬的根⽬录下,如下图所⽰:
这些⽂件将在程序运⾏时被载⼊进来,并在程序最终构建时被复制到与可执⾏⽂件同级的⽬录下。复制完成后,SteamVR Input窗⼝将读取⽂件信息并展⽰其包含的动作集合以及动作集合下的所有动作。如下图所⽰:
在Actions栏的右下⾓,可以点击加减号按钮添加或删除动作。每个动作具有名称(Name)、类型(Type)、本地化字符串(localization strings)等字段。其中,类型对应上节介绍的动作类型;本地化字符串是⾯向⽤户进⾏绑定的动作名称,开发者可以通过SteamVR API直接访问动作以及动作集。
当点击Save and Generate按钮后,插件将为动作以及动作集⽣成可编程访问的对象类,将它们放置在项⽬的SteamVR_input⽬录下,如下图所⽰:
发布评论