version 2.2.0
This commit is contained in:
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: d666d7e462cfc904b8684b09ffaab15f
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: eff108a5209eb0a48804dfdba0dabb63
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,285 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!1 &8419823203306955676
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 8419823203306955648}
|
||||
- component: {fileID: 8419823203306955651}
|
||||
- component: {fileID: 8419823203306955650}
|
||||
- component: {fileID: 8419823203306955677}
|
||||
m_Layer: 0
|
||||
m_Name: CustomGestureDefiner
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!4 &8419823203306955648
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 8419823203306955676}
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: -0.63137037, y: 1.8553617, z: -2.3483706}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Father: {fileID: 0}
|
||||
m_RootOrder: 0
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!114 &8419823203306955651
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 8419823203306955676}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: a4717f5ed1f0b0a4a8a1aa02c8d30b06, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
LFingers:
|
||||
- {fileID: 0}
|
||||
- {fileID: 0}
|
||||
- {fileID: 0}
|
||||
- {fileID: 0}
|
||||
- {fileID: 0}
|
||||
RFingers:
|
||||
- {fileID: 0}
|
||||
- {fileID: 0}
|
||||
- {fileID: 0}
|
||||
- {fileID: 0}
|
||||
- {fileID: 0}
|
||||
CurrentGestureL: {fileID: 0}
|
||||
CurrentGestureR: {fileID: 0}
|
||||
CurrentGestureDual: {fileID: 0}
|
||||
--- !u!114 &8419823203306955650
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 8419823203306955676}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 1fc3b0937a9ed7d4a82e0a0c262beaf4, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
ThumbDefiner:
|
||||
StraightDistalLowBound: 150
|
||||
StraightIntermediateLowBound: 150
|
||||
StraightProximalLowBound: 150
|
||||
BendingDistalLowBound: 140
|
||||
BendingIntermediateLowBound: 140
|
||||
BendingProximalLowBound: 140
|
||||
IndexDefiner:
|
||||
StraightDistalLowBound: 160
|
||||
StraightIntermediateLowBound: 160
|
||||
StraightProximalLowBound: 160
|
||||
BendingDistalLowBound: 120
|
||||
BendingIntermediateLowBound: 120
|
||||
BendingProximalLowBound: 120
|
||||
MiddleDefiner:
|
||||
StraightDistalLowBound: 160
|
||||
StraightIntermediateLowBound: 160
|
||||
StraightProximalLowBound: 160
|
||||
BendingDistalLowBound: 120
|
||||
BendingIntermediateLowBound: 120
|
||||
BendingProximalLowBound: 120
|
||||
RingDefiner:
|
||||
StraightDistalLowBound: 160
|
||||
StraightIntermediateLowBound: 160
|
||||
StraightProximalLowBound: 160
|
||||
BendingDistalLowBound: 120
|
||||
BendingIntermediateLowBound: 120
|
||||
BendingProximalLowBound: 120
|
||||
PinkyDefiner:
|
||||
StraightDistalLowBound: 160
|
||||
StraightIntermediateLowBound: 160
|
||||
StraightProximalLowBound: 160
|
||||
BendingDistalLowBound: 120
|
||||
BendingIntermediateLowBound: 120
|
||||
BendingProximalLowBound: 120
|
||||
--- !u!114 &8419823203306955677
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 8419823203306955676}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: d622bde162fe6524aa1cf99ee5bbda11, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
DefinedGestures:
|
||||
- GestureName: Fist
|
||||
TargetHand: 3
|
||||
ThumbStatus: 0
|
||||
IndexStatus: 0
|
||||
MiddleStatus: 0
|
||||
RingStatus: 0
|
||||
PinkyStatus: 0
|
||||
ThumbStatusIs: 3
|
||||
IndexStatusIs: 3
|
||||
MiddleStatusIs: 3
|
||||
RingStatusIs: 3
|
||||
PinkyStatusIs: 4
|
||||
DualHandDistance: 0
|
||||
DualNear: 0
|
||||
DualFar: 0
|
||||
ThumbIndexDistance: 0
|
||||
SingleNear: 0
|
||||
SingleFar: 0
|
||||
- GestureName: Point
|
||||
TargetHand: 3
|
||||
ThumbStatus: 3
|
||||
IndexStatus: 1
|
||||
MiddleStatus: 3
|
||||
RingStatus: 3
|
||||
PinkyStatus: 0
|
||||
ThumbStatusIs: 3
|
||||
IndexStatusIs: 1
|
||||
MiddleStatusIs: 4
|
||||
RingStatusIs: 4
|
||||
PinkyStatusIs: 4
|
||||
DualHandDistance: 0
|
||||
DualNear: 0
|
||||
DualFar: 0
|
||||
ThumbIndexDistance: 0
|
||||
SingleNear: 0
|
||||
SingleFar: 0
|
||||
- GestureName: Victory
|
||||
TargetHand: 3
|
||||
ThumbStatus: 3
|
||||
IndexStatus: 1
|
||||
MiddleStatus: 1
|
||||
RingStatus: 3
|
||||
PinkyStatus: 0
|
||||
ThumbStatusIs: 4
|
||||
IndexStatusIs: 1
|
||||
MiddleStatusIs: 1
|
||||
RingStatusIs: 4
|
||||
PinkyStatusIs: 4
|
||||
DualHandDistance: 0
|
||||
DualNear: 0
|
||||
DualFar: 0
|
||||
ThumbIndexDistance: 2
|
||||
SingleNear: 0
|
||||
SingleFar: 0
|
||||
- GestureName: OK
|
||||
TargetHand: 3
|
||||
ThumbStatus: 3
|
||||
IndexStatus: 1
|
||||
MiddleStatus: 1
|
||||
RingStatus: 1
|
||||
PinkyStatus: 0
|
||||
ThumbStatusIs: 6
|
||||
IndexStatusIs: 4
|
||||
MiddleStatusIs: 6
|
||||
RingStatusIs: 6
|
||||
PinkyStatusIs: 6
|
||||
DualHandDistance: 0
|
||||
DualNear: 0
|
||||
DualFar: 0
|
||||
ThumbIndexDistance: 1
|
||||
SingleNear: 3
|
||||
SingleFar: 5.5
|
||||
- GestureName: Like
|
||||
TargetHand: 3
|
||||
ThumbStatus: 3
|
||||
IndexStatus: 1
|
||||
MiddleStatus: 1
|
||||
RingStatus: 1
|
||||
PinkyStatus: 0
|
||||
ThumbStatusIs: 6
|
||||
IndexStatusIs: 3
|
||||
MiddleStatusIs: 3
|
||||
RingStatusIs: 3
|
||||
PinkyStatusIs: 3
|
||||
DualHandDistance: 0
|
||||
DualNear: 0
|
||||
DualFar: 0
|
||||
ThumbIndexDistance: 2
|
||||
SingleNear: 3
|
||||
SingleFar: 5.5
|
||||
- GestureName: Five
|
||||
TargetHand: 3
|
||||
ThumbStatus: 1
|
||||
IndexStatus: 1
|
||||
MiddleStatus: 1
|
||||
RingStatus: 1
|
||||
PinkyStatus: 0
|
||||
ThumbStatusIs: 6
|
||||
IndexStatusIs: 1
|
||||
MiddleStatusIs: 1
|
||||
RingStatusIs: 1
|
||||
PinkyStatusIs: 1
|
||||
DualHandDistance: 0
|
||||
DualNear: 0
|
||||
DualFar: 0
|
||||
ThumbIndexDistance: 0
|
||||
SingleNear: 0
|
||||
SingleFar: 0
|
||||
- GestureName: Rock
|
||||
TargetHand: 3
|
||||
ThumbStatus: 1
|
||||
IndexStatus: 1
|
||||
MiddleStatus: 3
|
||||
RingStatus: 3
|
||||
PinkyStatus: 0
|
||||
ThumbStatusIs: 1
|
||||
IndexStatusIs: 1
|
||||
MiddleStatusIs: 3
|
||||
RingStatusIs: 3
|
||||
PinkyStatusIs: 1
|
||||
DualHandDistance: 0
|
||||
DualNear: 0
|
||||
DualFar: 0
|
||||
ThumbIndexDistance: 0
|
||||
SingleNear: 0
|
||||
SingleFar: 0
|
||||
- GestureName: Vive
|
||||
TargetHand: 4
|
||||
ThumbStatus: 1
|
||||
IndexStatus: 1
|
||||
MiddleStatus: 3
|
||||
RingStatus: 3
|
||||
PinkyStatus: 0
|
||||
ThumbStatusIs: 6
|
||||
IndexStatusIs: 6
|
||||
MiddleStatusIs: 0
|
||||
RingStatusIs: 0
|
||||
PinkyStatusIs: 0
|
||||
DualHandDistance: 1
|
||||
DualNear: 10
|
||||
DualFar: 20
|
||||
ThumbIndexDistance: 2
|
||||
SingleNear: 5
|
||||
SingleFar: 10
|
||||
- GestureName: Push
|
||||
TargetHand: 4
|
||||
ThumbStatus: 1
|
||||
IndexStatus: 1
|
||||
MiddleStatus: 3
|
||||
RingStatus: 3
|
||||
PinkyStatus: 0
|
||||
ThumbStatusIs: 1
|
||||
IndexStatusIs: 1
|
||||
MiddleStatusIs: 1
|
||||
RingStatusIs: 1
|
||||
PinkyStatusIs: 1
|
||||
DualHandDistance: 2
|
||||
DualNear: 10
|
||||
DualFar: 20
|
||||
ThumbIndexDistance: 0
|
||||
SingleNear: 5
|
||||
SingleFar: 10
|
||||
@@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: d40280e42e98ad344b4cc9286448e6ff
|
||||
PrefabImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 760bbc4da8f43814c8291367d09bc819
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,162 @@
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
using UnityEngine.UI;
|
||||
using VIVE.OpenXR.Hand;
|
||||
using VIVE.OpenXR.Toolkits.CustomGesture;
|
||||
|
||||
public class DebugHandGesture : MonoBehaviour
|
||||
{
|
||||
public Text[] LFingers;
|
||||
public Text[] RFingers;
|
||||
public Text CurrentGestureL;
|
||||
public Text CurrentGestureR;
|
||||
public Text CurrentGestureDual;
|
||||
CustomGestureManager HGM;
|
||||
CustomGestureDefiner GD;
|
||||
void Start()
|
||||
{
|
||||
GD = GetComponent<CustomGestureDefiner>();
|
||||
HGM = GetComponent<CustomGestureManager>();
|
||||
}
|
||||
|
||||
void Update()
|
||||
{
|
||||
UpdateFingerStatus(CGEnums.HandFlag.Left); //get real left hand finger status
|
||||
UpdateFingerStatus(CGEnums.HandFlag.Right); //get real right hand finger status
|
||||
ShowCurrentGesture();
|
||||
}
|
||||
|
||||
void ShowCurrentGesture()
|
||||
{
|
||||
CurrentGestureL.text = "LGesture: " + "No Gesture";
|
||||
CurrentGestureR.text = "RGesture: " + "No Gesture";
|
||||
CurrentGestureDual.text = "DualGesture: " + "No Gesture";
|
||||
|
||||
if (!IsGestureReady())
|
||||
return;
|
||||
|
||||
foreach (CustomGesture _Gestures in GD.DefinedGestures)
|
||||
{
|
||||
switch (_Gestures.TargetHand)
|
||||
{
|
||||
case CGEnums.HandFlag.Either:
|
||||
//check left hand gesture
|
||||
if (CustomGestureDefiner.IsCurrentGestureTriiggered(_Gestures.GestureName, CGEnums.HandFlag.Left) && CheckHandValid(CGEnums.HandFlag.Left))
|
||||
CurrentGestureL.text = "LGesture: " + _Gestures.GestureName;
|
||||
//check right hand gesture
|
||||
if (CustomGestureDefiner.IsCurrentGestureTriiggered(_Gestures.GestureName, CGEnums.HandFlag.Right) && CheckHandValid(CGEnums.HandFlag.Right))
|
||||
CurrentGestureR.text = "RGesture: " + _Gestures.GestureName;
|
||||
//Debug.Log("DebugHandGesture ShowCurrentGesture() " + _Gestures.GestureName);
|
||||
break;
|
||||
case CGEnums.HandFlag.Dual:
|
||||
if (CustomGestureDefiner.IsCurrentGestureTriiggered(_Gestures.GestureName, CGEnums.HandFlag.Dual) && CheckHandValid(CGEnums.HandFlag.Left) && CheckHandValid(CGEnums.HandFlag.Right))
|
||||
{
|
||||
CurrentGestureDual.text = "DualGesture: " + _Gestures.GestureName;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
CurrentGestureL.text = "LGesture: " + "No Gesture";
|
||||
CurrentGestureR.text = "RGesture: " + "No Gesture";
|
||||
CurrentGestureDual.text = "DualGesture: " + "No Gesture";
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void UpdateFingerStatus(CGEnums.HandFlag _Hand)
|
||||
{
|
||||
Text[] _Fingers = (_Hand == CGEnums.HandFlag.Left) ? LFingers : RFingers;
|
||||
_Fingers[0].text = HGM.GetFingerStatus(_Hand, CGEnums.FingerFlag.Thumb).ToString();
|
||||
_Fingers[1].text = HGM.GetFingerStatus(_Hand, CGEnums.FingerFlag.Index).ToString();
|
||||
_Fingers[2].text = HGM.GetFingerStatus(_Hand, CGEnums.FingerFlag.Middle).ToString();
|
||||
_Fingers[3].text = HGM.GetFingerStatus(_Hand, CGEnums.FingerFlag.Ring).ToString();
|
||||
_Fingers[4].text = HGM.GetFingerStatus(_Hand, CGEnums.FingerFlag.Pinky).ToString();
|
||||
}
|
||||
|
||||
|
||||
bool CheckHandValid(CGEnums.HandFlag _Hand) {
|
||||
HandJoint[] _Joints = CustomGestureManager.GetHandJointLocations(_Hand);
|
||||
//Debug.Log("CheckHandValid() 0:" + _Joints[(int)XrHandJointEXT.XR_HAND_JOINT_PALM_EXT].isValid + ", 1:" +
|
||||
//_Joints[(int)XrHandJointEXT.XR_HAND_JOINT_WRIST_EXT].isValid + ", 2:" +
|
||||
//_Joints[(int)XrHandJointEXT.XR_HAND_JOINT_THUMB_TIP_EXT].isValid + ", 3:" +
|
||||
//_Joints[(int)XrHandJointEXT.XR_HAND_JOINT_INDEX_TIP_EXT].isValid + ", 4:" +
|
||||
//_Joints[(int)XrHandJointEXT.XR_HAND_JOINT_MIDDLE_TIP_EXT].isValid);
|
||||
|
||||
|
||||
if (!(_Joints[(int)XrHandJointEXT.XR_HAND_JOINT_PALM_EXT].isValid &&
|
||||
_Joints[(int)XrHandJointEXT.XR_HAND_JOINT_WRIST_EXT].isValid &&
|
||||
_Joints[(int)XrHandJointEXT.XR_HAND_JOINT_THUMB_TIP_EXT].isValid &&
|
||||
_Joints[(int)XrHandJointEXT.XR_HAND_JOINT_THUMB_PROXIMAL_EXT].isValid &&
|
||||
_Joints[(int)XrHandJointEXT.XR_HAND_JOINT_THUMB_DISTAL_EXT].isValid &&
|
||||
_Joints[(int)XrHandJointEXT.XR_HAND_JOINT_INDEX_METACARPAL_EXT].isValid &&
|
||||
_Joints[(int)XrHandJointEXT.XR_HAND_JOINT_INDEX_PROXIMAL_EXT].isValid &&
|
||||
_Joints[(int)XrHandJointEXT.XR_HAND_JOINT_INDEX_INTERMEDIATE_EXT].isValid &&
|
||||
_Joints[(int)XrHandJointEXT.XR_HAND_JOINT_INDEX_DISTAL_EXT].isValid &&
|
||||
_Joints[(int)XrHandJointEXT.XR_HAND_JOINT_INDEX_TIP_EXT].isValid &&
|
||||
_Joints[(int)XrHandJointEXT.XR_HAND_JOINT_MIDDLE_METACARPAL_EXT].isValid &&
|
||||
_Joints[(int)XrHandJointEXT.XR_HAND_JOINT_MIDDLE_PROXIMAL_EXT].isValid &&
|
||||
_Joints[(int)XrHandJointEXT.XR_HAND_JOINT_MIDDLE_INTERMEDIATE_EXT].isValid &&
|
||||
_Joints[(int)XrHandJointEXT.XR_HAND_JOINT_MIDDLE_DISTAL_EXT].isValid &&
|
||||
_Joints[(int)XrHandJointEXT.XR_HAND_JOINT_MIDDLE_TIP_EXT].isValid &&
|
||||
_Joints[(int)XrHandJointEXT.XR_HAND_JOINT_RING_METACARPAL_EXT].isValid &&
|
||||
_Joints[(int)XrHandJointEXT.XR_HAND_JOINT_RING_PROXIMAL_EXT].isValid &&
|
||||
_Joints[(int)XrHandJointEXT.XR_HAND_JOINT_RING_INTERMEDIATE_EXT].isValid &&
|
||||
_Joints[(int)XrHandJointEXT.XR_HAND_JOINT_RING_DISTAL_EXT].isValid &&
|
||||
_Joints[(int)XrHandJointEXT.XR_HAND_JOINT_RING_TIP_EXT].isValid &&
|
||||
_Joints[(int)XrHandJointEXT.XR_HAND_JOINT_LITTLE_METACARPAL_EXT].isValid &&
|
||||
_Joints[(int)XrHandJointEXT.XR_HAND_JOINT_LITTLE_PROXIMAL_EXT].isValid &&
|
||||
_Joints[(int)XrHandJointEXT.XR_HAND_JOINT_LITTLE_INTERMEDIATE_EXT].isValid &&
|
||||
_Joints[(int)XrHandJointEXT.XR_HAND_JOINT_LITTLE_DISTAL_EXT].isValid &&
|
||||
_Joints[(int)XrHandJointEXT.XR_HAND_JOINT_LITTLE_TIP_EXT].isValid))
|
||||
{
|
||||
//Debug.Log("DebugHandGesture CheckHandValid() not valid hand: "+ _Hand);
|
||||
return false;
|
||||
}
|
||||
//Debug.Log("DebugHandGesture CheckHandValid() valid hand: " + _Hand);
|
||||
return true;
|
||||
}
|
||||
|
||||
bool IsGestureReady() {
|
||||
HandJoint[] _JointsL = CustomGestureManager.GetHandJointLocations(CGEnums.HandFlag.Left);
|
||||
HandJoint[] _JointsR = CustomGestureManager.GetHandJointLocations(CGEnums.HandFlag.Right);
|
||||
//Debug.Log("IsGestureReady left before: " + HandTracking.GetHandJointLocations(HandFlag.Left)[0].isValid + ", " +
|
||||
//_JointsL[1].isValid + ", " + _JointsL[2].isValid + ", " + _JointsL[3].isValid + ", " + _JointsL[4].isValid + ", " +
|
||||
//_JointsL[5].isValid + ", " + _JointsL[6].isValid + ", " + _JointsL[7].isValid + ", " + _JointsL[8].isValid + ", " +
|
||||
//_JointsL[9].isValid + ", " + _JointsL[10].isValid + ", " + _JointsL[11].isValid + ", " + _JointsL[12].isValid + ", " +
|
||||
//_JointsL[13].isValid + ", " + _JointsL[14].isValid + ", " + _JointsL[15].isValid + ", " + _JointsL[16].isValid + ", " +
|
||||
//_JointsL[17].isValid + ", " + _JointsL[18].isValid + ", " + _JointsL[19].isValid + ", " + _JointsL[20].isValid);*/
|
||||
|
||||
|
||||
if (_JointsL[(int)XrHandJointEXT.XR_HAND_JOINT_PALM_EXT].position.x == 0 &&
|
||||
_JointsL[(int)XrHandJointEXT.XR_HAND_JOINT_PALM_EXT].position.y == 0 &&
|
||||
_JointsL[(int)XrHandJointEXT.XR_HAND_JOINT_PALM_EXT].position.z == 0 &&
|
||||
_JointsR[(int)XrHandJointEXT.XR_HAND_JOINT_PALM_EXT].position.x == 0 &&
|
||||
_JointsR[(int)XrHandJointEXT.XR_HAND_JOINT_PALM_EXT].position.y == 0 &&
|
||||
_JointsR[(int)XrHandJointEXT.XR_HAND_JOINT_PALM_EXT].position.z == 0)
|
||||
{
|
||||
//Debug.Log("IsGestureReady left palm before: " + _JointsL[0].position.x + ", " + _JointsL[0].position.y + ", " + _JointsL[0].position.z);
|
||||
//Debug.Log("IsGestureReady right palm before: " + _JointsR[0].position.x + ", " + _JointsR[0].position.y + ", " + _JointsR[0].position.z);
|
||||
//Debug.Log("IsGestureReady left wrist before: " + _JointsL[1].position.x + ", " + _JointsL[1].position.y + ", " + _JointsL[1].position.z);
|
||||
//Debug.Log("IsGestureReady right wrist before: " + _JointsR[1].position.x + ", " + _JointsR[1].position.y + ", " + _JointsR[1].position.z);
|
||||
//Debug.Log("DebugHandGesture IsGestureReady() not ready");
|
||||
return false;
|
||||
}
|
||||
|
||||
//Vector3 _LBone1Dir = Vector3.zero, _LBone2Dir = Vector3.zero, _RBone1Dir = Vector3.zero, _RBone2Dir = Vector3.zero;
|
||||
//HandJoint[] _LJoints = /*HandTracking.*/CustomGestureManager.GetHandJointLocations(HandFlag.Left);
|
||||
//_LBone1Dir = _LJoints[(int)(XrHandJointEXT.XR_HAND_JOINT_THUMB_DISTAL_EXT + 1)].position - _LJoints[(int)XrHandJointEXT.XR_HAND_JOINT_THUMB_DISTAL_EXT].position;
|
||||
//_LBone2Dir = _LJoints[(int)(XrHandJointEXT.XR_HAND_JOINT_THUMB_DISTAL_EXT - 1)].position - _LJoints[(int)XrHandJointEXT.XR_HAND_JOINT_THUMB_DISTAL_EXT].position;
|
||||
//Debug.Log("IsGestureReady left : " + Vector3.Angle(_LBone1Dir, _LBone2Dir));
|
||||
//HandJoint[] _RJoints = /*HandTracking.*/CustomGestureManager.GetHandJointLocations(HandFlag.Right);
|
||||
//_RBone1Dir = _RJoints[(int)(XrHandJointEXT.XR_HAND_JOINT_THUMB_DISTAL_EXT + 1)].position - _RJoints[(int)XrHandJointEXT.XR_HAND_JOINT_THUMB_DISTAL_EXT].position;
|
||||
//_RBone2Dir = _RJoints[(int)(XrHandJointEXT.XR_HAND_JOINT_THUMB_DISTAL_EXT - 1)].position - _RJoints[(int)XrHandJointEXT.XR_HAND_JOINT_THUMB_DISTAL_EXT].position;
|
||||
//Debug.Log("IsGestureReady right : " + Vector3.Angle(_RBone1Dir, _RBone2Dir));
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: a4717f5ed1f0b0a4a8a1aa02c8d30b06
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
File diff suppressed because it is too large
Load Diff
@@ -4,6 +4,7 @@ using UnityEngine;
|
||||
using UnityEngine.InputSystem;
|
||||
using UnityEngine.UI;
|
||||
using UnityEngine.XR;
|
||||
using UnityEngine.XR.OpenXR;
|
||||
|
||||
namespace VIVE.OpenXR.Samples.OpenXRInput
|
||||
{
|
||||
@@ -159,9 +160,12 @@ namespace VIVE.OpenXR.Samples.OpenXRInput
|
||||
|
||||
private float GetRefreshRate()
|
||||
{
|
||||
if (XR_FB_display_refresh_rate.GetDisplayRefreshRate(out float rate) == XrResult.XR_SUCCESS) { return rate; }
|
||||
if (!OpenXRRuntime.IsExtensionEnabled("XR_FB_display_refresh_rate"))
|
||||
return 0.0f;
|
||||
|
||||
return 0;
|
||||
if (XR_FB_display_refresh_rate.GetDisplayRefreshRate(out float rate) == XrResult.XR_SUCCESS) { return rate; }
|
||||
|
||||
return 0.0f;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,118 @@
|
||||
// Copyright HTC Corporation All Rights Reserved.
|
||||
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
using UnityEngine.UI;
|
||||
using UnityEngine.XR;
|
||||
|
||||
namespace VIVE.OpenXR.Samples.OpenXRInput
|
||||
{
|
||||
[RequireComponent(typeof(Text))]
|
||||
public class InputDevicesText : MonoBehaviour
|
||||
{
|
||||
public bool useXrNode = false;
|
||||
public bool useRole = false;
|
||||
public int StartIndex = 0, EndIndex = 0;
|
||||
|
||||
private Text m_Text = null;
|
||||
private void Awake()
|
||||
{
|
||||
m_Text = GetComponent<Text>();
|
||||
}
|
||||
|
||||
private readonly XRNode[] s_XrNodes = new XRNode[]
|
||||
{
|
||||
XRNode.LeftEye, // 0
|
||||
XRNode.RightEye,
|
||||
XRNode.CenterEye,
|
||||
XRNode.Head,
|
||||
XRNode.LeftHand,
|
||||
XRNode.RightHand, // 5
|
||||
XRNode.TrackingReference,
|
||||
XRNode.HardwareTracker,
|
||||
};
|
||||
private readonly InputDeviceRole[] s_DeviceRoles = new InputDeviceRole[]
|
||||
{
|
||||
InputDeviceRole.Generic, // 0
|
||||
InputDeviceRole.LeftHanded,
|
||||
InputDeviceRole.RightHanded,
|
||||
InputDeviceRole.GameController,
|
||||
InputDeviceRole.TrackingReference,
|
||||
InputDeviceRole.HardwareTracker, // 5
|
||||
InputDeviceRole.LegacyController,
|
||||
};
|
||||
private readonly InputDeviceCharacteristics[] s_Characteristics = new InputDeviceCharacteristics[]
|
||||
{
|
||||
InputDeviceCharacteristics.HeadMounted, // 0
|
||||
InputDeviceCharacteristics.Camera,
|
||||
InputDeviceCharacteristics.HeldInHand,
|
||||
InputDeviceCharacteristics.HandTracking,
|
||||
InputDeviceCharacteristics.EyeTracking,
|
||||
InputDeviceCharacteristics.TrackedDevice, // 5
|
||||
InputDeviceCharacteristics.Controller,
|
||||
InputDeviceCharacteristics.TrackingReference,
|
||||
InputDeviceCharacteristics.Left,
|
||||
InputDeviceCharacteristics.Right,
|
||||
InputDeviceCharacteristics.Simulated6DOF,
|
||||
};
|
||||
|
||||
internal static List<InputDevice> s_InputDevicesXrNode = new List<InputDevice>();
|
||||
internal static List<InputDevice> s_InputDevices = new List<InputDevice>();
|
||||
internal static List<InputDevice> s_InputDevicesRole = new List<InputDevice>();
|
||||
private void Update()
|
||||
{
|
||||
if (m_Text == null) { return; }
|
||||
|
||||
if (useXrNode)
|
||||
{
|
||||
m_Text.text = "";
|
||||
//for (int node = 0; node < s_XrNodes.Length; node++)
|
||||
{
|
||||
InputDevices.GetDevicesAtXRNode(s_XrNodes[7], s_InputDevicesXrNode);
|
||||
m_Text.text += "Node " + s_XrNodes[7] + " (" + s_InputDevicesXrNode.Count + "):\n";
|
||||
for (int i = 0; i < s_InputDevicesXrNode.Count; i++)
|
||||
{
|
||||
m_Text.text += "\n" + i + "." + s_InputDevicesXrNode[i].name;
|
||||
m_Text.text += "\n characteristics: " + s_InputDevicesXrNode[i].characteristics;
|
||||
m_Text.text += "\n serialNumber: " + s_InputDevicesXrNode[i].serialNumber;
|
||||
m_Text.text += "\n";
|
||||
}
|
||||
m_Text.text += "\n";
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
if (useRole)
|
||||
{
|
||||
m_Text.text = "";
|
||||
//for (int role = 0; role < s_DeviceRoles.Length; role++)
|
||||
{
|
||||
#pragma warning disable
|
||||
InputDevices.GetDevicesWithRole(s_DeviceRoles[5], s_InputDevicesRole);
|
||||
#pragma warning enable
|
||||
//InputDevices.GetDevicesWithCharacteristics(s_Characteristics[5], s_InputDevicesRole);
|
||||
m_Text.text += "Role " + s_DeviceRoles[5] + " (" + s_InputDevicesRole.Count + "):\n";
|
||||
for (int i = 0; i < s_InputDevicesRole.Count; i++)
|
||||
{
|
||||
m_Text.text += "\n" + i + "." + s_InputDevicesRole[i].name;
|
||||
m_Text.text += "\n characteristics: " + s_InputDevicesRole[i].characteristics;
|
||||
m_Text.text += "\n serialNumber: " + s_InputDevicesRole[i].serialNumber;
|
||||
m_Text.text += "\n";
|
||||
}
|
||||
m_Text.text += "\n";
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
InputDevices.GetDevices(s_InputDevices);
|
||||
m_Text.text = "Input Devices (" + s_InputDevices.Count + "):\n";
|
||||
for (int i = StartIndex; i < s_InputDevices.Count && i <= EndIndex; i++)
|
||||
{
|
||||
m_Text.text += "\n" + i + "." + s_InputDevices[i].name;
|
||||
m_Text.text += "\n characteristics: " + s_InputDevices[i].characteristics;
|
||||
m_Text.text += "\n serialNumber: " + s_InputDevices[i].serialNumber;
|
||||
m_Text.text += "\n";
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 871111764a2c66043bf49bde40b9bb1f
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -29,8 +29,8 @@ namespace VIVE.OpenXR.Samples.OpenXRInput
|
||||
}
|
||||
|
||||
[SerializeField]
|
||||
private int m_Index = 0;
|
||||
public int Index { get { return m_Index; } set { m_Index = value; } }
|
||||
private string m_TrackerName = "";
|
||||
public string TrackerName { get { return m_TrackerName; } set { m_TrackerName = value; } }
|
||||
|
||||
[SerializeField]
|
||||
private InputActionReference m_IsTracked = null;
|
||||
@@ -58,7 +58,7 @@ namespace VIVE.OpenXR.Samples.OpenXRInput
|
||||
{
|
||||
if (m_Text == null) { return; }
|
||||
|
||||
m_Text.text = "Tracker" + m_Index;
|
||||
m_Text.text = m_TrackerName;
|
||||
|
||||
m_Text.text += " isTracked: ";
|
||||
{
|
||||
|
||||
@@ -34,7 +34,24 @@ namespace VIVE.OpenXR.CompositionLayer.Samples.Passthrough
|
||||
|
||||
private void Update()
|
||||
{
|
||||
if (passthroughMesh != null && passthroughMeshTransform != null)
|
||||
if (VRSInputManager.instance.GetButtonDown(VRSButtonReference.B)) //Set Passthrough as Overlay
|
||||
{
|
||||
SetPassthroughToOverlay();
|
||||
}
|
||||
if (VRSInputManager.instance.GetButtonDown(VRSButtonReference.A)) //Set Passthrough as Underlay
|
||||
{
|
||||
SetPassthroughToUnderlay();
|
||||
}
|
||||
if (VRSInputManager.instance.GetButtonDown(VRSButtonReference.X)) //Switch to world lock
|
||||
{
|
||||
SetWorldLock();
|
||||
}
|
||||
if (VRSInputManager.instance.GetButtonDown(VRSButtonReference.Y)) //Switch to head lock
|
||||
{
|
||||
SetHeadLock();
|
||||
}
|
||||
|
||||
if (passthroughMesh != null && passthroughMeshTransform != null)
|
||||
{
|
||||
if (activePassthroughID == 0)
|
||||
{
|
||||
@@ -45,23 +62,6 @@ namespace VIVE.OpenXR.CompositionLayer.Samples.Passthrough
|
||||
SetPassthroughMesh();
|
||||
}
|
||||
}
|
||||
|
||||
if (VRSInputManager.instance.GetButtonDown(VRSButtonReference.B)) //Set Passthrough as Overlay
|
||||
{
|
||||
SetPassthroughToOverlay();
|
||||
}
|
||||
if (VRSInputManager.instance.GetButtonDown(VRSButtonReference.A)) //Set Passthrough as Underlay
|
||||
{
|
||||
SetPassthroughToUnderlay();
|
||||
}
|
||||
if (VRSInputManager.instance.GetButtonDown(VRSButtonReference.X)) //Switch to world lock
|
||||
{
|
||||
SetWorldLock();
|
||||
}
|
||||
if (VRSInputManager.instance.GetButtonDown(VRSButtonReference.Y)) //Switch to head lock
|
||||
{
|
||||
SetHeadLock();
|
||||
}
|
||||
}
|
||||
|
||||
public void SetPassthroughToOverlay()
|
||||
|
||||
Reference in New Issue
Block a user