0
点赞
收藏
分享

微信扫一扫

Unity3D OpenVR SteamVR 获取输入动作按键 交互设备数据方法

你的益达233 2022-02-11 阅读 84


在开发 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 字段应该由什么进行输入。默认可以选择下拉菜单选择某个已经定义好的抽象交互动作

Unity3D OpenVR SteamVR 获取输入动作按键 交互设备数据方法_openvr​​

如果以上没有任何抽象交互符合预期,请点击 Add 按钮添加新的自定义交互动作,点击 Add 按钮之后可以看到如下界面,咱添加一个新的交互动作

Unity3D OpenVR SteamVR 获取输入动作按键 交互设备数据方法_unity3d_02​​

自定义交互需要关注的点是交互的命名,默认的命名是 NewAction 默认的输入类型是 ​​SteamVR_Action_Boolean​​​ 类型。咱进行一些定制化,如为了支持 input 属性的类型是 ​​SteamVR_Action_Vector2​​​ 类型,将类型设置为 Vector2 顺便修改一下命名为 ​​DirectMovement​​ 动作,和加上本地化的字符串

Unity3D OpenVR SteamVR 获取输入动作按键 交互设备数据方法_unity_03​​

以上默认加入到 ​​default​​​ 的动作组里面,推荐不要删除 ​​default​​ 动作组,原因是在 SteamVR 组件里面有很多组件都用到了 default 动作组里的动作,删除会导致无法看见手和手柄

添加完成之后,点击 ​​SteamVR Input​​​ 窗口的 ​​Save and generate​​ 按钮,等待编译完成后,关闭这个窗口。再次回到游戏对象的脚本里面,此时可以选择咱刚才创建的动作

Unity3D OpenVR SteamVR 获取输入动作按键 交互设备数据方法_unity3d_04​​

此时就完成了 定义交互数据类型字段 和 绑定交互数据与 VR 抽象输入动作,接下来是将此抽象的动作绑定到具体的交互设备上

重新打开 ​​SteamVR Input​​​ 窗口,此窗口可以在 Unity3D 的菜单栏里面的 窗口->​​SteamVR Input​​ 打开

Unity3D OpenVR SteamVR 获取输入动作按键 交互设备数据方法_openvr_05​​

在 ​​SteamVR Input​​​ 窗口里面,点击 ​​Open binding UI​​ 按钮,打开 SteamVR 的 控制器按键设置 界面

Unity3D OpenVR SteamVR 获取输入动作按键 交互设备数据方法_C#_06​​

进入到 SteamVR 的 控制器按键设置 界面,点击当前按键设置的编辑按钮即可进入编辑。如果后续此应用或游戏发布后,玩家自定义按键也是通过此界面

Unity3D OpenVR SteamVR 获取输入动作按键 交互设备数据方法_unity3d_07​​

接下来配置上文定义 DirectMovement 动作,做法是点击 Thumb Stick 的加号,作为摇杆使用,点击位置,选择 DirectMovement 动作

Unity3D OpenVR SteamVR 获取输入动作按键 交互设备数据方法_C#_08​​

完成配置之后,点击 ​​替换默认按键设置​​ 按钮

Unity3D OpenVR SteamVR 获取输入动作按键 交互设备数据方法_C#_09​​

此时将会更改 Unity3D 里面的按键配置记录文件,同时关闭此窗口

通过上文步骤即可完成获取用户的动作,关联交互设备。在脚本代码里面,用户通过摇杆的动作将可以在 ​​input​​ 字段里面获取对应的值

本文其实是将 ​​Unity OpenVR 虚拟现实入门六:通过摇杆控制玩家移动​​ 这篇博客重新再写一次,系列博客请看


  • ​​Unity OpenVR 虚拟现实入门一:安装配置 Unity + OpenVR 环境​​
  • ​​Unity OpenVR 虚拟现实入门二:一个最简单的虚拟现实游戏/程序​​
  • ​​Unity OpenVR 虚拟现实入门三:最简单的五指交互​​
  • ​​Unity OpenVR 虚拟现实入门四:通过脚本控制手与控制器​​
  • ​​Unity OpenVR 虚拟现实入门五:通过传送控制玩家移动​​
  • ​​Unity OpenVR 虚拟现实入门六:通过摇杆控制玩家移动​​

我搭建了自己的博客 ​​https://blog.lindexi.com/​​ 欢迎大家访问,里面有很多新的博客。

如果在博客看到有任何不懂的,欢迎交流,我搭建了 ​​dotnet 职业技术学院​​ 欢迎大家加入

Unity3D OpenVR SteamVR 获取输入动作按键 交互设备数据方法_C#_10​​

本作品采用​​知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议​​​进行许可。欢迎转载、使用、重新发布,但务必保留文章署名​​林德熙​​​,不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请与我​​联系​​。


举报

相关推荐

0 条评论