Unity使用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动作,我们先一起来了解一个这个吧

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

扫描二维码关注公众号,回复: 14670028 查看本文章

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

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

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

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

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

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

 default : 默认设置

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

  1. boolean:一些按键,是否按下
  2. vector1:[0-1]的一个范围值可以判断按钮按到哪个程度
  3. vector2:遥感或者触摸板信息
  4. vector3:输入一个三维值
  5. pose:输入三维空间的位置和角度
  6. 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<SteamVR_Action_Boolean>("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最基本的部分使用方法就清楚了,接下来就可以实现别的进阶功能

猜你喜欢

转载自blog.csdn.net/Liu_ChangC/article/details/124399317