2025-05-17 03:50:43Unity使用SteamVR2.0 SteamVRInput配置和使用

注意:Unity需要使用2020以上的版本

一:选择最新版本插件

1.下载SteamVRPlugin和VRTK v4

新版本的Unity,已经关掉了资源商店的功能,下载插件需求先去官网资源商店添加我们需要的插件

(我随便找一款商店资源)

点击添加到我的资源,然后我们再打开Unity

Unity(Window-PackageManager)

打开PackageManager窗口,资源类型选择MyAssets

选中SteamVR和VRTKv4,右下角先点击Downloade,将资源下载下来,下载完成后,再点击import,就完成了插件的导入

SteamVR 2.0

启动SteamVR后,会弹出一个窗口,是否配置VR动作,我们先一起来了解一个这个吧

我们在配置前,要先知道为什么要做这个配置

在旧版本的SteamVR项目开发中,我们在编译脚本实现功能的时候,例如做拾取物品时,我们监听手柄的trigger按钮状态,在按下时,拾取手边的道具,用户在使用我们的产品时,需要按照我们开发的规则来使用,可能就会和用户日常的使用习惯冲突,可能用户在使用别的产品时,拾取物品是Grab键,这就导致用户每次使用一个新的产品,都要在适应操作这一块花费大量时间精力,使得使用起来的体验感变差

在新版本的SteamVR项目开发中,当我们在做相同的功能时,就不再监听手柄按钮了,我们监听SteamVRInput的Actions

(Window-SteamVRInput)先打开这个SteamVRInput窗口

我们可以看到,SteamVR2.0内置了很多Actions,这些基本已经能满足日常的开发需要了,我们要了解一下这些Actions

在SteamVR配置面板中会关联到这里的设置

我们注意到下面有一个type可以选择,per hand(每只手),morrored(镜像),hidden(隐藏)

default : 默认设置

SteamVR内置的这些默认事件,总共有6个type

boolean:一些按键,是否按下vector1:[0-1]的一个范围值可以判断按钮按到哪个程度vector2:遥感或者触摸板信息vector3:输入一个三维值pose:输入三维空间的位置和角度skeleton:比如手部的关节信息

platformer: 平台游戏

两项输入,Move移动,Jump跳跃

buggy:模拟驾驶

Steering方向,Throttle油门,Brake刹车,Reset复位

mixedreality:混合现实

配置:新建一个Action

如果我们想要了解VR输入事件的工作原理,最好的方法就是从头开始,了解一遍

新建一个NewAction

观察它的ActionDetails

Full Action Path :这个是配置路径

Name:事件名称

Type:输入事件类型

Required:事件的级别(Optional可选可不选,Suggested推荐选择,Mandatory强制选择)

设置它的细节

保存设置,然后打开控制器按键设置

配置:添加手柄对应Action

将我们设置的新事件,配置上去

配置有镜像模式,勾选后两个手柄的基本功能就一致了,不勾选可以定义不同的事件

因为我们新设置的Action是一个boolean类型的,所以我想把它定义到扳机键上去,看看怎么设置吧

注意:我用的是Oculus设备,HTC在按键上会有差别, 注意有区别的地方,别配错了

1. 点击这边这个按钮

2. 我希望将它当做按键来使用

3.默认有点击和触摸两个选择,点击更多选项,可以有更多配置选择

4.我把它配置到单击上,找到我之前写好的testaction

5.这样就配置好了,有人可能会注意到右下角的设置按钮,针对个人习惯,可以微调这些参数,我们就不对它做什么设置了

6. 保存设置

Unity使用SteamVRInput的Action事件

新建一个空场景,删掉原本的相机在场景中添加[CameraRig]预制件

新建一个脚本,把它添加到一个空对象上

//获取SteamVRInput配置的事件

public SteamVR_Action_Boolean action = SteamVR_Actions.default_TestAction;

//public SteamVR_Action_Boolean action = SteamVR_Input.GetAction("InteractUI");

void Start()

{

//添加事件响应的方法

action.onStateDown += OnTestActionStateDown;

action.onStateUp+=OnTestActionStateUp;

}

//响应回调

private void OnTestActionStateUp(SteamVR_Action_Boolean fromAction, SteamVR_Input_Sources fromSource)

{

Debug.Log("按键抬起");

}

//响应回调

private void OnTestActionStateDown(SteamVR_Action_Boolean fromAction, SteamVR_Input_Sources fromSource)

{

Debug.Log("按键按下");

}

运行之后,在按下我设定好的按钮之后,事件响应了,控制台输出了如下内容

可以看到在action中,有这么多它的状态监听事件,在开发过程中,就可以按照自己想要的效果,监听不同的事件

如果要确定到左手或右手按下按键,还可以这么写

public SteamVR_Action_Boolean action = SteamVR_Actions.default_TestAction;

//手柄控制器

public SteamVR_Behaviour_Pose pose;

void Update()

{

//手柄控制器上的设定事件按下

if (action.GetStateDown(pose.inputSource))

{

Debug.Log("按键按下");

}

//手柄控制器上的设定事件抬起

if (action.GetStateUp(pose.inputSource))

{

Debug.Log("按键抬起");

}

}

把[CameraRig] 控制器中的左手或右手,拖到脚本上去就可以了

SteamVR2.0最基本的部分使用方法就清楚了,接下来就可以实现别的进阶功能