OculusQeust의 핸드 추적을 따기를 시도했습니다.
9467 단어 OculusQuesthandtrackingVRUnity
소감
시도한 것
손가락으로 따기
뽑은 상태를 얻을 수 있었을 때에는 손의 색이 바뀌는 프로그램을 만들어 보았습니다.
한 손가락
두 손가락
손가락과 엄지의 거리
각 손가락과 엄지 사이에 0.0~1.0(0.0이 붙은 값)의 값으로 어느 곳에서 완전히 붙는 곳까지 얻을 수 있습니다. 이 값을 바탕으로 큐브의 크기를 변경 (완전히 달라 붙으면 사라짐) 해 보았습니다.
샘플 코드
using UnityEngine;
public class Detection : MonoBehaviour
{
[SerializeField] private OVRHand ovrHand;
[SerializeField] private SkinnedMeshRenderer handRenderer;
[SerializeField] private Material on;
[SerializeField] private Material off;
[SerializeField] private Transform cube;
private bool _isIndexPinching;
private bool _isMiddlePinching;
private bool _isRingPinching;
private bool _isPinkyPinching;
private int _pinchingFingerNumber;
void Update()
{
_isIndexPinching = ovrHand.GetFingerIsPinching(OVRHand.HandFinger.Index);
_isMiddlePinching = ovrHand.GetFingerIsPinching(OVRHand.HandFinger.Middle);
_isRingPinching = ovrHand.GetFingerIsPinching(OVRHand.HandFinger.Ring);
_isPinkyPinching = ovrHand.GetFingerIsPinching(OVRHand.HandFinger.Pinky);
_pinchingFingerNumber = 0;
if (_isIndexPinching) _pinchingFingerNumber++;
if (_isMiddlePinching) _pinchingFingerNumber++;
if (_isRingPinching) _pinchingFingerNumber++;
if (_isPinkyPinching) _pinchingFingerNumber++;
// 一本指でピンチしているときだけ on にする
handRenderer.materials = _pinchingFingerNumber == 1 ? new[] {on} : new[] {off};
// 人差し指のピンチングの強さに応じて cube の scale を変更する
var strength = ovrHand.GetFingerPinchStrength(OVRHand.HandFinger.Index);
var scale = 0.075f * (1 - strength);
cube.localScale = new Vector3(scale, scale, scale);
}
}
보충
public enum HandStatus
{
HandTracked = (1 << 0), // if this is set the hand pose and bone rotations data is usable
InputStateValid = (1 << 1), // if this is set the pointer pose and pinch data is usable
SystemGestureInProgress = (1 << 6), // if this is set the hand is currently processing a system gesture
}
OVRPlugin 안을 보면 HandStatus
의 SystemGestureInProgress
의 값이 돌로 설정되어 있습니다. 이 사이에 뭔가 들어오는 것이 아닐까 생각됩니다. 또 BoneId
에 있는 코멘트도,
// add new bones here
그리고 아직 아직 앞으로 다양한 확장이 들어올 것 같다고 느꼈습니다.
참고
OculusQuest의 핸드 트래킹에 대해 여러 가지를 살펴 보았습니다.
Reference
이 문제에 관하여(OculusQeust의 핸드 추적을 따기를 시도했습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/matchyy/items/c7e0b5ddeff04b3a1275
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
using UnityEngine;
public class Detection : MonoBehaviour
{
[SerializeField] private OVRHand ovrHand;
[SerializeField] private SkinnedMeshRenderer handRenderer;
[SerializeField] private Material on;
[SerializeField] private Material off;
[SerializeField] private Transform cube;
private bool _isIndexPinching;
private bool _isMiddlePinching;
private bool _isRingPinching;
private bool _isPinkyPinching;
private int _pinchingFingerNumber;
void Update()
{
_isIndexPinching = ovrHand.GetFingerIsPinching(OVRHand.HandFinger.Index);
_isMiddlePinching = ovrHand.GetFingerIsPinching(OVRHand.HandFinger.Middle);
_isRingPinching = ovrHand.GetFingerIsPinching(OVRHand.HandFinger.Ring);
_isPinkyPinching = ovrHand.GetFingerIsPinching(OVRHand.HandFinger.Pinky);
_pinchingFingerNumber = 0;
if (_isIndexPinching) _pinchingFingerNumber++;
if (_isMiddlePinching) _pinchingFingerNumber++;
if (_isRingPinching) _pinchingFingerNumber++;
if (_isPinkyPinching) _pinchingFingerNumber++;
// 一本指でピンチしているときだけ on にする
handRenderer.materials = _pinchingFingerNumber == 1 ? new[] {on} : new[] {off};
// 人差し指のピンチングの強さに応じて cube の scale を変更する
var strength = ovrHand.GetFingerPinchStrength(OVRHand.HandFinger.Index);
var scale = 0.075f * (1 - strength);
cube.localScale = new Vector3(scale, scale, scale);
}
}
public enum HandStatus
{
HandTracked = (1 << 0), // if this is set the hand pose and bone rotations data is usable
InputStateValid = (1 << 1), // if this is set the pointer pose and pinch data is usable
SystemGestureInProgress = (1 << 6), // if this is set the hand is currently processing a system gesture
}
OVRPlugin 안을 보면
HandStatus
의 SystemGestureInProgress
의 값이 돌로 설정되어 있습니다. 이 사이에 뭔가 들어오는 것이 아닐까 생각됩니다. 또 BoneId
에 있는 코멘트도, // add new bones here
그리고 아직 아직 앞으로 다양한 확장이 들어올 것 같다고 느꼈습니다.
참고
OculusQuest의 핸드 트래킹에 대해 여러 가지를 살펴 보았습니다.
Reference
이 문제에 관하여(OculusQeust의 핸드 추적을 따기를 시도했습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/matchyy/items/c7e0b5ddeff04b3a1275
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(OculusQeust의 핸드 추적을 따기를 시도했습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/matchyy/items/c7e0b5ddeff04b3a1275텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)