注意:Unity需要使用2020以上的版本
新版本的Unity,已经关掉了资源商店的功能,下载插件需求先去官网资源商店添加我们需要的插件
(我随便找一款商店资源)
点击添加到我的资源,然后我们再打开Unity
Unity(Window-PackageManager)
打开PackageManager窗口,资源类型选择MyAssets
选中SteamVR和VRTKv4,右下角先点击Downloade,将资源下载下来,下载完成后,再点击import,就完成了插件的导入
启动SteamVR后,会弹出一个窗口,是否配置VR动作,我们先一起来了解一个这个吧
我们在配置前,要先知道为什么要做这个配置
在旧版本的SteamVR项目开发中,我们在编译脚本实现功能的时候,例如做拾取物品时,我们监听手柄的trigger按钮状态,在按下时,拾取手边的道具,用户在使用我们的产品时,需要按照我们开发的规则来使用,可能就会和用户日常的使用习惯冲突,可能用户在使用别的产品时,拾取物品是Grab键,这就导致用户每次使用一个新的产品,都要在适应操作这一块花费大量时间精力,使得使用起来的体验感变差
在新版本的SteamVR项目开发中,当我们在做相同的功能时,就不再监听手柄按钮了,我们监听SteamVRInput的Actions
(Window-SteamVRInput)先打开这个SteamVRInput窗口
我们可以看到,SteamVR2.0内置了很多Actions,这些基本已经能满足日常的开发需要了,我们要了解一下这些Actions
在SteamVR配置面板中会关联到这里的设置
我们注意到下面有一个type可以选择,per hand(每只手),morrored(镜像),hidden(隐藏)
SteamVR内置的这些默认事件,总共有6个type
两项输入,Move移动,Jump跳跃
Steering方向,Throttle油门,Brake刹车,Reset复位
如果我们想要了解VR输入事件的工作原理,最好的方法就是从头开始,了解一遍
观察它的ActionDetails
Full Action Path :这个是配置路径
Name:事件名称
Type:输入事件类型
Required:事件的级别(Optional可选可不选,Suggested推荐选择,Mandatory强制选择)
配置有镜像模式,勾选后两个手柄的基本功能就一致了,不勾选可以定义不同的事件
因为我们新设置的Action是一个boolean类型的,所以我想把它定义到扳机键上去,看看怎么设置吧
注意:我用的是Oculus设备,HTC在按键上会有差别, 注意有区别的地方,别配错了
1. 点击这边这个按钮
2. 我希望将它当做按键来使用
3.默认有点击和触摸两个选择,点击更多选项,可以有更多配置选择
4.我把它配置到单击上,找到我之前写好的testaction
5.这样就配置好了,有人可能会注意到右下角的设置按钮,针对个人习惯,可以微调这些参数,我们就不对它做什么设置了
6. 保存设置
//获取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("按键按下");
}
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("按键抬起");
}
}
SteamVR2.0最基本的部分使用方法就清楚了,接下来就可以实现别的进阶功能