Unity에서 Oculus Quest의 핸드 트래킹 사용 (터치 및 핀치)
17164 단어 OculusQuestVRUnity
환경
Unity 2019.2.17f1
사전 준비
Scene 만들기
Hierarchy
Oculus > VR > Prefabs > OVRCameraRig 추가
(처음에 있던 MainCamera는 삭제해 둔다)
Inspector
OVR Manager (script) > Input > Hand Tracking Support → [Controllers and Hands]
OVR Manager (script) > Tracking > Tracking Origin Type → [Floor Level]
손 추가
Hierarchy
Oculus > VR > Prefabs > OVRHandPrefab을 LeftHandAnchor 및 RightHandAnchor 아래에 추가
Inspector
OVRHand, OVRSkeleton 및 OVRMesh HandType에 Hand Left 또는 Hand Right를 선택합니다.
OVRSkeleton의 Enable Physics Capsules 확인
스켈레톤 표시로 하는 경우
OVRHandPrefab의 OVR Skeleton Renderer 확인
맞춤 소재로 만들 때
OVRHandPrefab의 Skinned Mesh Renderer에서 Materials > Element0을 원하는 머티리얼로 변경
빌드 확인
핸드 추적된 손이 표시되면 OK
왼쪽이 해골, 오른쪽이 맞춤 재질
충돌 이벤트
큐브를 터치하여 색상을 변경해 봅니다.
Hierarchy
Cube를 추가하여 위치와 크기를 적당하게 조정 (size:0.2, position: 0,0.5,1)
Inspector
Box Collider의 Is Trigger 확인
ChangeColor.cs 스크립트를 만들고 Cube에 추가
ChangeColor.csusing System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class CubeTouch : MonoBehaviour
{
private Renderer renderer;
void Start()
{
renderer = this.gameObject.GetComponent<Renderer>();
}
private void OnTriggerEnter(Collider collider)
{
if (collider.gameObject.name == "Hand_Index3_CapsuleCollider")
{
renderer.material.color = Color.red;
}
}
private void OnTriggerExit(Collider collider)
{
if (collider.gameObject.name == "Hand_Index3_CapsuleCollider")
{
renderer.material.color = Color.white;
}
}
}
히트하면 빨강, 빗나가면 흰색에 머티리얼을 갱신하고 있습니다.
collider의 이름은 Hand_XXX_CapsuleCollider이므로 BoneId에서 결정할 뼈를 지정합니다.
OVRPlugin.cspublic enum BoneId
{
Invalid = -1,
Hand_Start = 0,
Hand_WristRoot = Hand_Start + 0, // root frame of the hand, where the wrist is located
Hand_ForearmStub = Hand_Start + 1, // frame for user's forearm
Hand_Thumb0 = Hand_Start + 2, // thumb trapezium bone
Hand_Thumb1 = Hand_Start + 3, // thumb metacarpal bone
Hand_Thumb2 = Hand_Start + 4, // thumb proximal phalange bone
Hand_Thumb3 = Hand_Start + 5, // thumb distal phalange bone
Hand_Index1 = Hand_Start + 6, // index proximal phalange bone
Hand_Index2 = Hand_Start + 7, // index intermediate phalange bone
Hand_Index3 = Hand_Start + 8, // index distal phalange bone
Hand_Middle1 = Hand_Start + 9, // middle proximal phalange bone
Hand_Middle2 = Hand_Start + 10, // middle intermediate phalange bone
Hand_Middle3 = Hand_Start + 11, // middle distal phalange bone
Hand_Ring1 = Hand_Start + 12, // ring proximal phalange bone
Hand_Ring2 = Hand_Start + 13, // ring intermediate phalange bone
Hand_Ring3 = Hand_Start + 14, // ring distal phalange bone
Hand_Pinky0 = Hand_Start + 15, // pinky metacarpal bone
Hand_Pinky1 = Hand_Start + 16, // pinky proximal phalange bone
Hand_Pinky2 = Hand_Start + 17, // pinky intermediate phalange bone
Hand_Pinky3 = Hand_Start + 18, // pinky distal phalange bone
Hand_MaxSkinnable = Hand_Start + 19,
// Bone tips are position only. They are not used for skinning but are useful for hit-testing.
// NOTE: Hand_ThumbTip == Hand_MaxSkinnable since the extended tips need to be contiguous
Hand_ThumbTip = Hand_Start + Hand_MaxSkinnable + 0, // tip of the thumb
Hand_IndexTip = Hand_Start + Hand_MaxSkinnable + 1, // tip of the index finger
Hand_MiddleTip = Hand_Start + Hand_MaxSkinnable + 2, // tip of the middle finger
Hand_RingTip = Hand_Start + Hand_MaxSkinnable + 3, // tip of the ring finger
Hand_PinkyTip = Hand_Start + Hand_MaxSkinnable + 4, // tip of the pinky
Hand_End = Hand_Start + Hand_MaxSkinnable + 5,
// add new bones here
Max = Hand_End + 0,
}
htps // 엔.ぃきぺぢ아. 오 rg/우우키/P는 ぁx_보네#/메아아/후우아:S짱메_후만_밥d_보네 s-엔. svg
0에서 3까지 손가락 끝
핀치 조작
핀치 조작으로 큐브의 색을 변경해 봅니다.
손 보기에서 추가한 OVRHandPrefab에 MyHand.cs 스크립트 추가
MyHand.csusing System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class MyHand : MonoBehaviour
{
private OVRHand hand;
private Renderer renderer;
void Start()
{
renderer = GameObject.Find("Cube").GetComponent<Renderer>();
hand = this.gameObject.GetComponent<OVRHand>();
}
void Update()
{
if (hand.GetFingerIsPinching(OVRHand.HandFinger.Middle))
{
renderer.material.color = Color.blue;
}
else if (material.color == Color.blue)
{
renderer.material.color = Color.white;
}
}
}
hand.GetFingerIsPinching 로 핀치 하고 있는지 어떤지를 취득할 수 있습니다.
OVRHand.HandFinger.Middle을 Index나 Ring으로 하면 핀치할 손가락을 지정할 수 있습니다.
가운데 손가락과 엄지 손가락을 붙이면 파란색, 놓으면 흰색으로 재질을 업데이트하고 있습니다.
완성
제대로 가운데 손가락 이외는 색이 바뀌지 않는다!
양손 사용할 수 있다!
공식 사이트
htps : //에서 ゔぇぺぺr. 오쿠스. 코 m / 도쿠 멘 타치 온 / 우니 ty / ㅁ st / 곤세 pts / 우니 ty-sun dt 등 c 킨 g /
사이고에게
약지와 새끼 손가락은 겹쳐져 오작동하기 쉽다.
무언가 조작에 사용하는 경우는 가운데 손가락이 좋을 것 같다. (검지 손가락은 선택)
다음은 SDK의 SampleFramework를 사용한 방법도 시도해 보자.
→ Unity에서 Oculus Integration의 SampleFramework를 사용하여 Oculus Quest의 핸드 트래킹 시도
Reference
이 문제에 관하여(Unity에서 Oculus Quest의 핸드 트래킹 사용 (터치 및 핀치)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/qvtec/items/a5b668bac926c598afd7
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Hierarchy
Oculus > VR > Prefabs > OVRHandPrefab을 LeftHandAnchor 및 RightHandAnchor 아래에 추가
Inspector
OVRHand, OVRSkeleton 및 OVRMesh HandType에 Hand Left 또는 Hand Right를 선택합니다.
OVRSkeleton의 Enable Physics Capsules 확인
스켈레톤 표시로 하는 경우
OVRHandPrefab의 OVR Skeleton Renderer 확인
맞춤 소재로 만들 때
OVRHandPrefab의 Skinned Mesh Renderer에서 Materials > Element0을 원하는 머티리얼로 변경
빌드 확인
핸드 추적된 손이 표시되면 OK
왼쪽이 해골, 오른쪽이 맞춤 재질
충돌 이벤트
큐브를 터치하여 색상을 변경해 봅니다.
Hierarchy
Cube를 추가하여 위치와 크기를 적당하게 조정 (size:0.2, position: 0,0.5,1)
Inspector
Box Collider의 Is Trigger 확인
ChangeColor.cs 스크립트를 만들고 Cube에 추가
ChangeColor.csusing System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class CubeTouch : MonoBehaviour
{
private Renderer renderer;
void Start()
{
renderer = this.gameObject.GetComponent<Renderer>();
}
private void OnTriggerEnter(Collider collider)
{
if (collider.gameObject.name == "Hand_Index3_CapsuleCollider")
{
renderer.material.color = Color.red;
}
}
private void OnTriggerExit(Collider collider)
{
if (collider.gameObject.name == "Hand_Index3_CapsuleCollider")
{
renderer.material.color = Color.white;
}
}
}
히트하면 빨강, 빗나가면 흰색에 머티리얼을 갱신하고 있습니다.
collider의 이름은 Hand_XXX_CapsuleCollider이므로 BoneId에서 결정할 뼈를 지정합니다.
OVRPlugin.cspublic enum BoneId
{
Invalid = -1,
Hand_Start = 0,
Hand_WristRoot = Hand_Start + 0, // root frame of the hand, where the wrist is located
Hand_ForearmStub = Hand_Start + 1, // frame for user's forearm
Hand_Thumb0 = Hand_Start + 2, // thumb trapezium bone
Hand_Thumb1 = Hand_Start + 3, // thumb metacarpal bone
Hand_Thumb2 = Hand_Start + 4, // thumb proximal phalange bone
Hand_Thumb3 = Hand_Start + 5, // thumb distal phalange bone
Hand_Index1 = Hand_Start + 6, // index proximal phalange bone
Hand_Index2 = Hand_Start + 7, // index intermediate phalange bone
Hand_Index3 = Hand_Start + 8, // index distal phalange bone
Hand_Middle1 = Hand_Start + 9, // middle proximal phalange bone
Hand_Middle2 = Hand_Start + 10, // middle intermediate phalange bone
Hand_Middle3 = Hand_Start + 11, // middle distal phalange bone
Hand_Ring1 = Hand_Start + 12, // ring proximal phalange bone
Hand_Ring2 = Hand_Start + 13, // ring intermediate phalange bone
Hand_Ring3 = Hand_Start + 14, // ring distal phalange bone
Hand_Pinky0 = Hand_Start + 15, // pinky metacarpal bone
Hand_Pinky1 = Hand_Start + 16, // pinky proximal phalange bone
Hand_Pinky2 = Hand_Start + 17, // pinky intermediate phalange bone
Hand_Pinky3 = Hand_Start + 18, // pinky distal phalange bone
Hand_MaxSkinnable = Hand_Start + 19,
// Bone tips are position only. They are not used for skinning but are useful for hit-testing.
// NOTE: Hand_ThumbTip == Hand_MaxSkinnable since the extended tips need to be contiguous
Hand_ThumbTip = Hand_Start + Hand_MaxSkinnable + 0, // tip of the thumb
Hand_IndexTip = Hand_Start + Hand_MaxSkinnable + 1, // tip of the index finger
Hand_MiddleTip = Hand_Start + Hand_MaxSkinnable + 2, // tip of the middle finger
Hand_RingTip = Hand_Start + Hand_MaxSkinnable + 3, // tip of the ring finger
Hand_PinkyTip = Hand_Start + Hand_MaxSkinnable + 4, // tip of the pinky
Hand_End = Hand_Start + Hand_MaxSkinnable + 5,
// add new bones here
Max = Hand_End + 0,
}
htps // 엔.ぃきぺぢ아. 오 rg/우우키/P는 ぁx_보네#/메아아/후우아:S짱메_후만_밥d_보네 s-엔. svg
0에서 3까지 손가락 끝
핀치 조작
핀치 조작으로 큐브의 색을 변경해 봅니다.
손 보기에서 추가한 OVRHandPrefab에 MyHand.cs 스크립트 추가
MyHand.csusing System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class MyHand : MonoBehaviour
{
private OVRHand hand;
private Renderer renderer;
void Start()
{
renderer = GameObject.Find("Cube").GetComponent<Renderer>();
hand = this.gameObject.GetComponent<OVRHand>();
}
void Update()
{
if (hand.GetFingerIsPinching(OVRHand.HandFinger.Middle))
{
renderer.material.color = Color.blue;
}
else if (material.color == Color.blue)
{
renderer.material.color = Color.white;
}
}
}
hand.GetFingerIsPinching 로 핀치 하고 있는지 어떤지를 취득할 수 있습니다.
OVRHand.HandFinger.Middle을 Index나 Ring으로 하면 핀치할 손가락을 지정할 수 있습니다.
가운데 손가락과 엄지 손가락을 붙이면 파란색, 놓으면 흰색으로 재질을 업데이트하고 있습니다.
완성
제대로 가운데 손가락 이외는 색이 바뀌지 않는다!
양손 사용할 수 있다!
공식 사이트
htps : //에서 ゔぇぺぺr. 오쿠스. 코 m / 도쿠 멘 타치 온 / 우니 ty / ㅁ st / 곤세 pts / 우니 ty-sun dt 등 c 킨 g /
사이고에게
약지와 새끼 손가락은 겹쳐져 오작동하기 쉽다.
무언가 조작에 사용하는 경우는 가운데 손가락이 좋을 것 같다. (검지 손가락은 선택)
다음은 SDK의 SampleFramework를 사용한 방법도 시도해 보자.
→ Unity에서 Oculus Integration의 SampleFramework를 사용하여 Oculus Quest의 핸드 트래킹 시도
Reference
이 문제에 관하여(Unity에서 Oculus Quest의 핸드 트래킹 사용 (터치 및 핀치)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/qvtec/items/a5b668bac926c598afd7
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
큐브를 터치하여 색상을 변경해 봅니다.
Hierarchy
Cube를 추가하여 위치와 크기를 적당하게 조정 (size:0.2, position: 0,0.5,1)
Inspector
Box Collider의 Is Trigger 확인
ChangeColor.cs 스크립트를 만들고 Cube에 추가
ChangeColor.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class CubeTouch : MonoBehaviour
{
private Renderer renderer;
void Start()
{
renderer = this.gameObject.GetComponent<Renderer>();
}
private void OnTriggerEnter(Collider collider)
{
if (collider.gameObject.name == "Hand_Index3_CapsuleCollider")
{
renderer.material.color = Color.red;
}
}
private void OnTriggerExit(Collider collider)
{
if (collider.gameObject.name == "Hand_Index3_CapsuleCollider")
{
renderer.material.color = Color.white;
}
}
}
히트하면 빨강, 빗나가면 흰색에 머티리얼을 갱신하고 있습니다.
collider의 이름은 Hand_XXX_CapsuleCollider이므로 BoneId에서 결정할 뼈를 지정합니다.
OVRPlugin.cs
public enum BoneId
{
Invalid = -1,
Hand_Start = 0,
Hand_WristRoot = Hand_Start + 0, // root frame of the hand, where the wrist is located
Hand_ForearmStub = Hand_Start + 1, // frame for user's forearm
Hand_Thumb0 = Hand_Start + 2, // thumb trapezium bone
Hand_Thumb1 = Hand_Start + 3, // thumb metacarpal bone
Hand_Thumb2 = Hand_Start + 4, // thumb proximal phalange bone
Hand_Thumb3 = Hand_Start + 5, // thumb distal phalange bone
Hand_Index1 = Hand_Start + 6, // index proximal phalange bone
Hand_Index2 = Hand_Start + 7, // index intermediate phalange bone
Hand_Index3 = Hand_Start + 8, // index distal phalange bone
Hand_Middle1 = Hand_Start + 9, // middle proximal phalange bone
Hand_Middle2 = Hand_Start + 10, // middle intermediate phalange bone
Hand_Middle3 = Hand_Start + 11, // middle distal phalange bone
Hand_Ring1 = Hand_Start + 12, // ring proximal phalange bone
Hand_Ring2 = Hand_Start + 13, // ring intermediate phalange bone
Hand_Ring3 = Hand_Start + 14, // ring distal phalange bone
Hand_Pinky0 = Hand_Start + 15, // pinky metacarpal bone
Hand_Pinky1 = Hand_Start + 16, // pinky proximal phalange bone
Hand_Pinky2 = Hand_Start + 17, // pinky intermediate phalange bone
Hand_Pinky3 = Hand_Start + 18, // pinky distal phalange bone
Hand_MaxSkinnable = Hand_Start + 19,
// Bone tips are position only. They are not used for skinning but are useful for hit-testing.
// NOTE: Hand_ThumbTip == Hand_MaxSkinnable since the extended tips need to be contiguous
Hand_ThumbTip = Hand_Start + Hand_MaxSkinnable + 0, // tip of the thumb
Hand_IndexTip = Hand_Start + Hand_MaxSkinnable + 1, // tip of the index finger
Hand_MiddleTip = Hand_Start + Hand_MaxSkinnable + 2, // tip of the middle finger
Hand_RingTip = Hand_Start + Hand_MaxSkinnable + 3, // tip of the ring finger
Hand_PinkyTip = Hand_Start + Hand_MaxSkinnable + 4, // tip of the pinky
Hand_End = Hand_Start + Hand_MaxSkinnable + 5,
// add new bones here
Max = Hand_End + 0,
}
htps // 엔.ぃきぺぢ아. 오 rg/우우키/P는 ぁx_보네#/메아아/후우아:S짱메_후만_밥d_보네 s-엔. svg
0에서 3까지 손가락 끝
핀치 조작
핀치 조작으로 큐브의 색을 변경해 봅니다.
손 보기에서 추가한 OVRHandPrefab에 MyHand.cs 스크립트 추가
MyHand.csusing System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class MyHand : MonoBehaviour
{
private OVRHand hand;
private Renderer renderer;
void Start()
{
renderer = GameObject.Find("Cube").GetComponent<Renderer>();
hand = this.gameObject.GetComponent<OVRHand>();
}
void Update()
{
if (hand.GetFingerIsPinching(OVRHand.HandFinger.Middle))
{
renderer.material.color = Color.blue;
}
else if (material.color == Color.blue)
{
renderer.material.color = Color.white;
}
}
}
hand.GetFingerIsPinching 로 핀치 하고 있는지 어떤지를 취득할 수 있습니다.
OVRHand.HandFinger.Middle을 Index나 Ring으로 하면 핀치할 손가락을 지정할 수 있습니다.
가운데 손가락과 엄지 손가락을 붙이면 파란색, 놓으면 흰색으로 재질을 업데이트하고 있습니다.
완성
제대로 가운데 손가락 이외는 색이 바뀌지 않는다!
양손 사용할 수 있다!
공식 사이트
htps : //에서 ゔぇぺぺr. 오쿠스. 코 m / 도쿠 멘 타치 온 / 우니 ty / ㅁ st / 곤세 pts / 우니 ty-sun dt 등 c 킨 g /
사이고에게
약지와 새끼 손가락은 겹쳐져 오작동하기 쉽다.
무언가 조작에 사용하는 경우는 가운데 손가락이 좋을 것 같다. (검지 손가락은 선택)
다음은 SDK의 SampleFramework를 사용한 방법도 시도해 보자.
→ Unity에서 Oculus Integration의 SampleFramework를 사용하여 Oculus Quest의 핸드 트래킹 시도
Reference
이 문제에 관하여(Unity에서 Oculus Quest의 핸드 트래킹 사용 (터치 및 핀치)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/qvtec/items/a5b668bac926c598afd7
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class MyHand : MonoBehaviour
{
private OVRHand hand;
private Renderer renderer;
void Start()
{
renderer = GameObject.Find("Cube").GetComponent<Renderer>();
hand = this.gameObject.GetComponent<OVRHand>();
}
void Update()
{
if (hand.GetFingerIsPinching(OVRHand.HandFinger.Middle))
{
renderer.material.color = Color.blue;
}
else if (material.color == Color.blue)
{
renderer.material.color = Color.white;
}
}
}
제대로 가운데 손가락 이외는 색이 바뀌지 않는다!
양손 사용할 수 있다!
공식 사이트
htps : //에서 ゔぇぺぺr. 오쿠스. 코 m / 도쿠 멘 타치 온 / 우니 ty / ㅁ st / 곤세 pts / 우니 ty-sun dt 등 c 킨 g /
사이고에게
약지와 새끼 손가락은 겹쳐져 오작동하기 쉽다.
무언가 조작에 사용하는 경우는 가운데 손가락이 좋을 것 같다. (검지 손가락은 선택)
다음은 SDK의 SampleFramework를 사용한 방법도 시도해 보자.
→ Unity에서 Oculus Integration의 SampleFramework를 사용하여 Oculus Quest의 핸드 트래킹 시도
Reference
이 문제에 관하여(Unity에서 Oculus Quest의 핸드 트래킹 사용 (터치 및 핀치)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/qvtec/items/a5b668bac926c598afd7
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(Unity에서 Oculus Quest의 핸드 트래킹 사용 (터치 및 핀치)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/qvtec/items/a5b668bac926c598afd7텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)