Oculus Quest + Unity 2019.3 pinch test
今回はピンチ操作をかるく触ってみる
前回のつづきから
なんかオブジェクトを配置
今回は「Cube」を使用
(大きさ、場所は適当に調整する。
IsTrigger
言葉通り「引き金」の意で、物理的接触がない何かしらの処理をする場合に使用する
オブジェクトのIsTriggerにチェックを入れるだけ(今回はCubeの
トリガー発生時のイベント処理
今回は、物理的接触がない処理としてピンチ操作を試してみる。
ピンチ操作の統合 ピンチ操作は、手を使用するUIインタラクションとしては、昔からある基本的なインタラクションです。人差し指のピンチ操作が適切に行われると、コントローラーの通常の選択やトリガーのアクションと同じ操作、つまり、UI上のボタンなどのコントロールをアクティブにする操作とみなされます。
指が現在ピンチ操作をしているかどうかを検出し、そのピンチ操作の強さをチェックするには、OVRHand.csからGetFingerIsPinching()およびGetFingerPinchStrength()のメソッドを呼び出します。クエリの対象となる指について、HandFinger列挙で定義される、関係する指の定数を渡します。指の定数は、Thumb、Index、Middle、Ring、およびPinkyです。
今回は人差し指(Index)でいきます
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; public class MyHand : MonoBehaviour { private OVRHand hand; private new Renderer renderer; void Start() { // Use this for initialization (初期化に使用) // Cubeを取得する renderer = GameObject.Find("Cube").GetComponent<Renderer>(); hand = this.gameObject.GetComponent<OVRHand>(); } void Update() { // Update is called once per frame (Update はフレームごとに 1 回呼び出されます) bool isPinch = hand.GetFingerIsPinching(OVRHand.HandFinger.Index); float strength = hand.GetFingerPinchStrength(OVRHand.HandFinger.Index); string message = "GetFingerIsPinching -> " + isPinch + "(" + strength + ")"; if (isPinch) { renderer.material.color = Color.blue; } else { renderer.material.color = Color.white; } GameObject.Find("TrackingManager").GetComponent<TextMesh>().text = message; } }
骨格ID
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 Max = Hand_End + 0