找回密码
 注册帐号

扫一扫,访问微社区

Like SteamVR按钮事件的绑定和封装

3
回复
2001
查看
[ 复制链接 ]
排名
64952
昨日变化

5

主题

49

帖子

1023

积分

Rank: 9Rank: 9Rank: 9

UID
354297
好友
0
蛮牛币
460
威望
0
注册时间
2020-11-3
在线时间
963 小时
最后登录
2021-9-28
2021-2-4 00:15:02 显示全部楼层 阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?注册帐号

x
[p=20 null left]#【前言】蛮牛的排版是真的难用,发一次帖子帖子格式都要搞好久好久
[mw_shl_code=csharptrue]public static int Compute(Type t)
        {
            string toBeHashed = \"s\\0\\0\\0\" + t.Namespace + t.Name;
            using (HashAlgorithm hash = new MD4())
            {
                byte[] hashed = hash.ComputeHash(System.Text.Encoding.UTF8.GetBytes(toBeHashed));
                int result = 0;

                for (int i = 3; i >= 0; --i)
                {
                    result <<= 8; result |= hashed;
                }
                return result;
            }
        }[/mw_shl_code]

[p=20 null left]
##之前搞SteamVR需要用到手柄的交互,然后从网上找了steamVR1.0的输入事件用,并发现不能应用于2.0的SteanVR,所以测试时也是找的steamVR1.0的SDK,后来回头看了下2.0升级的相关功能,还是要跟随官方的步伐,所以研究了段时间的2.0的按钮输入事件,由于之前不知道公司电脑unity的文件被加密,导致steamVR读取不了事件的json文件,导致绑定不上按钮,所以也是几经周折,吸取了经验,把学习的两个版本的的手柄按钮事件分享下来。
[img=3000]leanote://file/getImage?fileId=601ace1fb0761c698b000000[/img]

[p=20 null left]图为HTC VIVE Controller手柄按钮图示


【SteamVR1.0按钮事件输入】
```
using UnityEngine;
using System.Collections;
public class shoubingkongzhi : MonoBehaviour {
/// 手柄
SteamVR_TrackedObject tracked;

[mw_shl_code=cpptrue]public class test:monobehabeiha
{
void Start(){
}

void Update(){
}
}
[/mw_shl_code]
void Awake(){
//获取手柄tracked = GetComponent();
}


// Update is called once per
void FixedUpdate()
{
var device = SteamVR_Controller.Input((int)tracked.index);
if (device.GetPressDown(SteamVR_Controller.ButtonMask.Touchpad))
{
Debug.Log(\\\"按下圆盘\\\");
}
else if (device.GetPressDown(SteamVR_Controller.ButtonMask.Trigger))
{
Debug.Log(\\\"按下扳机键\\\");
}
else if (device.GetPressDown(SteamVR_Controller.ButtonMask.Grip))
{
Debug.Log(\\\"按下手柄侧键\\\");
}
else if (device.GetPressDown(SteamVR_Controller.ButtonMask.ApplicationMenu))
{
Debug.Log(\\\"按下手柄菜单键\\\");
}else if (device.GetPressDown(SteamVR_Controller.ButtonMask.ApplicationMenu))
{
Debug.Log(\\\"按下手柄菜单键\\\");
}
}
}
```

[p=20 null left]以上都是HTC VIVE手柄中按键按下的代码,直接从手柄上调用即可。其他还有:
按键松开—device.GetPressUp(SteamVR_Controller.ButtonMask.Trigger);
按键长按—device.GetPress(SteamVR_Controller.ButtonMask.Trigger);
按键按下还有另一种方式,但是我自我感觉用着很别扭,没上述的好。device.GetTouchDown(SteamVR_Controller.ButtonMask.ApplicationMenu);
其他用法与GetPressDown()类似。

**SteamVR1.0插件下载


#【SteamVR2.0按钮事件输入】
##新版SDK需要事件绑定到对应的按钮,我也测过官方自带的默认绑定事件

[p=20 null left]我用的是Unity2018.4.0f1下载的SDK,官方默认已经绑定好的按钮事件:
【InteractUI——扳机
【Teleport——圆盘按钮
【GrabPinch——扳机
【GrabGrip——两侧键
但功能不太齐全,建议还是自定义绑定使用会比较方便。
https://www.pianshen.com/article/4804330780/——SteamVR Plugin 2.0 InteractionSystem场景中如何使用新手柄按键

所以改版后的事件调用大致如下:

[p=20 null left]public SteamVR_Action_Boolean tigger;//握持键
[p=20 null left]

[p=20 null left]void Update()
[p=20 null left]{
[p=20 null left]if (tigger.GetStateDown(hand.handType))//按下
{
Debug.Log(\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"tigger\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\");
}

[p=20 null left]}
[p=20 null left]
##【基于事件系统的调用机制封装了代码,让开发者更方便绑定和调用事件】

[p=20 null left]我自己封装了一个静态类,用于玩家自定义事件和封装按钮方法,让玩家像Unity的Iuput方法一样调用按钮按下、正在按当中、抬起三种按钮状态的方法封装。也让左右手和对应事件调用更简明。
[p=20 null left]using UnityEngine;
using UnityEngine.Events;
using Valve.VR;
using System;
using System.Collections.Generic;
using UnityEditor;

[p=20 null left]namespace Valve.VR
{
public enum E_GetKey { 扳机 触控板 握持 菜单 }//这里的枚举元素要对应上底下手柄输入事件,枚举长度索引对应手柄输入事件的名称

[p=20 null left]public static class VRInput
{
//手柄自定义的输入事件要绑定到对应的按钮如果要增删事件,就修改这个数组和上面与之对应的枚举
static SteamVR_Action_Boolean[] m_action = {
SteamVR_Input.GetBooleanAction(\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"扳机事件\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\")//第1个事件,可自己选择
SteamVR_Input.GetBooleanAction(\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"触控板事件\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\")//第2个事件,可自己选择
SteamVR_Input.GetBooleanAction(\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"握持事件\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\")//第3个事件,可自己选择
SteamVR_Input.GetBooleanAction(\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"菜单事件\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\")//第3个事件,可自己选择
};

[p=20 null left]public static bool GetKeyDown(SteamVR_Input_Sources inputType E_GetKey getKeyDown)
{
//Debug.LogError(\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"GetKeyDown\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\");
if (m_action[(int)getKeyDown].GetStateDown(inputType))
{
//Debug.LogError(\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"GetKeyDown\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\");
return true;
}
return false;
}

[p=20 null left]public static bool GetKey(SteamVR_Input_Sources inputType E_GetKey getkeyActive)
{
//Debug.LogError(\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"GetKey\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\");
if (m_action[(int)getkeyActive].GetState(inputType))
{
return true;
}
return false;
}

[p=20 null left]public static bool GetKeyUp(SteamVR_Input_Sources inputType E_GetKey getKeyUp)
{
//Debug.LogError(\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"GetKeyUp\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\");
if (m_action[(int)getKeyUp].GetStateUp(inputType))
{
return true;
}
return false;
}
}
}

[p=20 null left] **SteamVR2.0插件下载:

SteamVRController手柄按钮

SteamVRController手柄按钮
回复

使用道具 举报

4四处流浪
427/500

0

主题

37

帖子

427

积分

Rank: 4

UID
346732
好友
0
蛮牛币
216
威望
0
注册时间
2020-5-11
在线时间
390 小时
最后登录
2021-4-28
2021-4-16 16:15:49 显示全部楼层
前排瓜子沙发
回复

使用道具 举报

3偶尔光临
220/300

0

主题

17

帖子

220

积分

Rank: 3Rank: 3Rank: 3

UID
357490
好友
0
蛮牛币
30
威望
0
注册时间
2021-4-12
在线时间
203 小时
最后登录
2021-10-18
2021-4-21 10:51:29 显示全部楼层
mark mark mark
回复

使用道具 举报

7日久生情
1927/5000
排名
3554
昨日变化

1

主题

462

帖子

1927

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
203671
好友
1
蛮牛币
3958
威望
0
注册时间
2017-1-20
在线时间
1054 小时
最后登录
2021-10-25
2021-4-23 09:05:42 显示全部楼层
6666666666666666666666666666
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册帐号

本版积分规则

关注游戏蛮牛公众号送vip