【Unity】SteamVR Plugin 2.7.2+按钮测试总结


更新版本的SteamVR Plugin 2.7.2中的controller按钮确实很方便了,但是刚开始使用的时候有点难以理解,测试的时候不出自己的效果。

其实整体思想上没有变化,都是自己写脚本的时候,如何获取你想要的按钮的状态,1.0版本都是自己去写,比较随便,当硬件换了的时候,整体代码就需要重新写,比较麻烦。而2.0官方进行了一个封装,将硬件中各个按钮和脚步进行了独立封装,硬件是硬件,软件是软件。

1 所谓硬件部分的配置

SteamVR Input 中添加actions,匹配相应的按钮;

在这里插入图片描述

下面这个一定要步骤,添加了自己的东西的话,一定要点击“Save and generate”,保持同步:
在这里插入图片描述
以上步骤定义了运动集,比如默认的那个运动集:有interact,Teleport等等,如何将这些值和手柄的各个按键匹配,是最重要的步骤。如下点击open Binding UI,打开匹配界面。
在这里插入图片描述
在这里插入图片描述

下面这个操作后,匹配完自己的action后,一定要点击“替换默认键按钮”
在这里插入图片描述
在这里插入图片描述

这里注意:建议左右手自己匹配自己的,不要选镜像模式,我一直没有靠这个模式匹配成功,最后单独匹配了右手手柄。

2 软件使用这些按钮的步骤

1 新建一个cs脚本

在cs脚本中添加三个

using Valve.VR;
using Valve.VR.Extras;
using Valve.VR.InteractionSystem;

2 在脚本类中,创建action按钮值

在这里插入图片描述

需要啥类型的就搞啥类型的

 	public SteamVR_Action_Boolean GrabAction;
    public SteamVR_Action_Boolean TeleportAction;
    public SteamVR_Action_Boolean TrigerAction;

在update函数中进行测试:

 		if (GrabAction.GetStateDown(SteamVR_Input_Sources.Any))
        {
            Debug.Log("grab");
        }
        if (TeleportAction.GetState(SteamVR_Input_Sources.Any))
        {
            Vector2 teleport_axis = TeleportAxis.GetAxis(SteamVR_Input_Sources.Any);
            Debug.Log("teleport:" + teleport_axis);
        }
 
        if (TrigerAction.GetStateDown(SteamVR_Input_Sources.Any))
        {
             Debug.Log("triger");
        }

3 unity UI中的操作

在这里插入图片描述
在这里插入图片描述

3 测试效果:

在这里插入图片描述

注:主要参考的是文献3,其他的几个资料主要理解了下整个流程

4 代码

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

using Valve.VR;
using Valve.VR.Extras;
using Valve.VR.InteractionSystem;


public class HTC_Controller : MonoBehaviour
{
    private Vector3 Endpos;
    public SteamVR_Action_Boolean forward;
    public SteamVR_Action_Boolean manuRotate;
    // Update is called once per frame
    private void Start()
    {
        Endpos = GameObject.Find("Controller (right)").GetComponent<MyRay>().end_pos;
    }
    private void Update()
    {

        if (forward.GetStateDown(SteamVR_Input_Sources.Any))
        {
            Debug.Log("forward");
            print("ok");
           
        }

        if (manuRotate.GetStateDown(SteamVR_Input_Sources.Any))
        {
            Debug.Log("manuRotate");
        }
       
    }
}

5 总结

如果上面的步骤整体上还是整不通,建议去youtube 去搜SteamVR Plugin 2.0看一个教学视频,或者看看文献1中的资料,文献1是官方文档
此处总结一下流程:

1.打开SteamVR Input window添加actions,Save and generate,
2.在binging UI绑定action,点击“替换默认键按钮”
3.在脚本中添加public属性的几个变量,并用”变量.GetStateDown(SteamVR_Input_Sources.Any)“形式获取按钮的响应值
4.脚本挂在controller上
5.在unity 的UI界面中选取相应的action匹配值
6.测试

具体操作参考上面的步骤;

在第三步获取按钮的相应值由很多种方法,但是我目前测试成功这种,其他的还没成功;

bool state = SteamVR_Actions._default.Plant[SteamVR_Input_Sources.LeftHand].state;

bool state = SteamVR_Actions.default_Plant[SteamVR_Input_Sources.LeftHand].state;

bool state = SteamVR_Input.GetState("Plant", SteamVR_Input_Sources.LeftHand);

SteamVR_Action_Boolean action = SteamVR_Input.GetBooleanAction("Plant");

bool state = action.GetState(SteamVR_Input_Sources.LeftHand);

6 参考文献

1.https://valvesoftware.github.io/steamvr_unity_plugin/tutorials/SteamVR-Input.html

2.https://blog.csdn.net/qq_35030499/article/details/89310646?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-3.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-3.control

3.https://blog.csdn.net/u013032852/article/details/89633755?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-11.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-11.control

4.https://zhuanlan.zhihu.com/p/52567129

5.https://blog.csdn.net/littlelittlesir/article/details/105636712

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值