Unity에서 Oculus Quest의 핸드 트래킹 사용 (터치 및 핀치)

17164 단어 OculusQuestVRUnity
Oculus Quest의 핸드 트래킹에서 다음을 시도하십시오.
  • 손 표시
  • 큐브를 터치하여 색상을 변경합니다
  • 핀치 조작으로 큐브의 색상 변경

  • 환경



    Unity 2019.2.17f1

    사전 준비


  • Unity에서 Quest 용 빌드가 가능합니다
  • Oculus Integration Assets 추가

  • 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.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.cs
    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;
            }
        }
    }
    

    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의 핸드 트래킹 시도

    좋은 웹페이지 즐겨찾기