

Unity3D OpenVR SteamVR 获取输入动作按键 交互设备数据方法
source link: https://lindexi.gitee.io/post/Unity3D-OpenVR-SteamVR-%E8%8E%B7%E5%8F%96%E8%BE%93%E5%85%A5%E5%8A%A8%E4%BD%9C%E6%8C%89%E9%94%AE-%E4%BA%A4%E4%BA%92%E8%AE%BE%E5%A4%87%E6%95%B0%E6%8D%AE%E6%96%B9%E6%B3%95.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

在开发 OpenVR 游戏或应用时,由于 VR 设备的交互形式和传统的形式不相同,因此获取输入交互设备数据如按键等的方式也有所不同。在 Steam VR SDK 里面给出了推荐的做法是只定义交互名称,而不获取具体的硬件设备信息,也就是说咱在应用或游戏里面采用的交互都是抽象的交互,至于这个抽象的交互是采用哪个硬件产生的,就交给跟上一层进行定义,于是就能很好的将编写代码的获取输入和各个不同类型的 VR 控制器隔离开来,避免 VR 应用绑死某个控制器上,也能很好的支持未来的交互设备
基于 SteamVR SDK 开发的应用,获取输入的交互动作的步骤如下
- 定义交互数据类型字段
- 绑定交互数据与 VR 抽象输入动作
- 关联 VR 输入动作与实体控制器
定义交互数据类型字段的做法是在代码里面定义字段, 将这个字段的返回值定义为自己需要输入的数值类型,可以选择的输入类型请参阅 Unity3D OpenVR SteamVR Input Action 动作 博客,大概如下
- Boolean 类型动作: 表示只有两个状态的动作,如跳起,只有不跳和跳。对应
SteamVR_Action_Boolean
类型 - Single 类型动作: 表示 [0,1] 过程的范围值,如 Trigger 键按下到松开的过程。对应
SteamVR_Action_Single
类型 - Vector2 类型动作: 可以表示如 x 和 y 方向的值,如上下左右方向,如 手柄摇杆 的功能。对应
SteamVR_Action_Vector2
类型 - Vector3 类型动作: 返回三维的数值,对应
SteamVR_Action_Vector3
类型 - Pose 类型动作: 返回三维空间中的位置和旋转,如跟踪 VR 控制器,对应
SteamVR_Action_Pose
类型 - Skeleton 类型动作: 对应
SteamVR_Action_Skeleton
类型
例如咱期望获取摇杆的动作,咱本质逻辑需要的是一个表示上下左右移动方向的值,可以对应到 Vector2 类型动作。如上文可以了解到对应的是 SteamVR_Action_Vector2
类型,此时的代码编写如下
public SteamVR_Action_Vector2 input;
将代码脚本附加到某个游戏对象上,下一步就是需要绑定交互数据与 VR 抽象输入动作。告诉 Unity3D 咱刚才定义的 input 字段应该由什么进行输入。默认可以选择下拉菜单选择某个已经定义好的抽象交互动作
如果以上没有任何抽象交互符合预期,请点击 Add 按钮添加新的自定义交互动作,点击 Add 按钮之后可以看到如下界面,咱添加一个新的交互动作
自定义交互需要关注的点是交互的命名,默认的命名是 NewAction 默认的输入类型是 SteamVR_Action_Boolean
类型。咱进行一些定制化,如为了支持 input 属性的类型是 SteamVR_Action_Vector2
类型,将类型设置为 Vector2 顺便修改一下命名为 DirectMovement
动作,和加上本地化的字符串
以上默认加入到 default
的动作组里面,推荐不要删除 default
动作组,原因是在 SteamVR 组件里面有很多组件都用到了 default 动作组里的动作,删除会导致无法看见手和手柄
添加完成之后,点击 SteamVR Input
窗口的 Save and generate
按钮,等待编译完成后,关闭这个窗口。再次回到游戏对象的脚本里面,此时可以选择咱刚才创建的动作
此时就完成了 定义交互数据类型字段 和 绑定交互数据与 VR 抽象输入动作,接下来是将此抽象的动作绑定到具体的交互设备上
重新打开 SteamVR Input
窗口,此窗口可以在 Unity3D 的菜单栏里面的 窗口->SteamVR Input
打开
在 SteamVR Input
窗口里面,点击 Open binding UI
按钮,打开 SteamVR 的 控制器按键设置 界面
进入到 SteamVR 的 控制器按键设置 界面,点击当前按键设置的编辑按钮即可进入编辑。如果后续此应用或游戏发布后,玩家自定义按键也是通过此界面
接下来配置上文定义 DirectMovement 动作,做法是点击 Thumb Stick 的加号,作为摇杆使用,点击位置,选择 DirectMovement 动作
完成配置之后,点击 替换默认按键设置
按钮
此时将会更改 Unity3D 里面的按键配置记录文件,同时关闭此窗口
通过上文步骤即可完成获取用户的动作,关联交互设备。在脚本代码里面,用户通过摇杆的动作将可以在 input
字段里面获取对应的值
本文其实是将 Unity OpenVR 虚拟现实入门六:通过摇杆控制玩家移动 这篇博客重新再写一次,系列博客请看
本文会经常更新,请阅读原文: https://blog.lindexi.com/post/Unity3D-OpenVR-SteamVR-%E8%8E%B7%E5%8F%96%E8%BE%93%E5%85%A5%E5%8A%A8%E4%BD%9C%E6%8C%89%E9%94%AE-%E4%BA%A4%E4%BA%92%E8%AE%BE%E5%A4%87%E6%95%B0%E6%8D%AE%E6%96%B9%E6%B3%95.html ,以避免陈旧错误知识的误导,同时有更好的阅读体验。
如果你想持续阅读我的最新博客,请点击 RSS 订阅,推荐使用RSS Stalker订阅博客,或者前往 CSDN 关注我的主页
本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。欢迎转载、使用、重新发布,但务必保留文章署名林德熙(包含链接: https://blog.lindexi.com ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请 与我联系 。
无盈利,不卖课,做纯粹的技术博客
以下是广告时间
推荐关注 Edi.Wang 的公众号
欢迎进入 Eleven 老师组建的 .NET 社区
以上广告全是友情推广,无盈利
Recommend
-
4
Unity3D OpenVR SteamVR Input Action 动作本文来告诉大家在 Unity3D 中的 SteamVR Input 里面的 Action 动作行为 开始之前,请先阅读 Unity OpenVR 虚拟现实入门...
-
10
Unity3D OpenVR 虚拟现实 保龄球打砖块游戏开发据说水哥买了 Valve Index 设备,既然这个设备这么贵,不开发点有(zhi)趣(zhang)游戏就感觉对不起这个设备。本文将来开始着手开发一个可玩性不大,观赏性极强的保龄球打砖块游戏。这仅仅只是一个入门级的...
-
7
Unity3D OpenVR SteamVR 点击菜单切换场景本文来告诉大家如何在基于 SteamVR 的 Unity3D 里面在用户点击菜单的时候,切换到新的场景的方法 在开始之前,期望大家已阅读过基于 SteamVR 的 Unity3D 相关博客,如果还没了解相关知识,请参阅如下...
-
4
Unity3D OpenVR SteamVR 在头盔视觉前面常驻文本我期望在玩家视觉前方常驻一点文本,用于做有趣的交互,实现方法很简单 在开始之前,期望大家已阅读过基于 SteamVR 的 Unity3D 相关博客,如果还没了解相关知识,请参阅如下博客 如...
-
15
Modified OpenVR DLL with AMD FidelityFX SuperResolution Upscaler This modified openvr_api.dll allows you to apply FidelityFX SuperResolution upscaling to many SteamVR game...
-
1
学fpga(按键输入)
-
6
嵌入式软件设计(按键输入)
-
8
STM32CubeMX输入配置---按键 本示例主要讲解IO口输入模式的应用,以按键驱动为例来学校输入模式配置方法。本次实验所用开发板有3个按键,其中一个为复位按键,另外两个则可用户自行驱动。我们采用板载的2个按键来实现对LED灯开关控制。
-
2
fpga实操训练(按键输入)
-
7
全志V3S嵌入式驱动开发(多按键输入驱动) ...
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK