トマシープが学ぶ

Unity/VR/AR/デザイン好きのミーハー 記事内容は自分用のメモです

【OculusHandTracking】自分のシーンで手の表示&ピンチ取得【Unity】

前回環境構築と、サンプルシーンのビルドをしました。

bibinbaleo.hatenablog.com

今回は自分のシーンで手を動かしてみます。

ドキュメント・参考

公式ドキュメント

developer.oculus.com

こちらも詳しい

qiita.com

手を表示する

OVRCameraRigを置いてControllerAndHandsなどにする

f:id:bibinbaleo:20191223124240p:plain

OVRHandPrefabをLeftHandAnchor、RightHandAnchorの下に置く

f:id:bibinbaleo:20191223150613p:plain

デフォルトがLeftの設定になっているのでRightはRightにする。

f:id:bibinbaleo:20191223150610p:plain

これで出た!

f:id:bibinbaleo:20191223151323j:plain

 

サンプルのプレハブ

サンプルシーンのプレハブを持ってきます。

To use prefabs in your own scenes, place the following prefabs into your scene:

  • Assets/Core/HandsInteraction/Prefabs/InteractableToolsSDKDriver
  • Assets/Usage/HandsTrainExample/Prefabs/NearFieldButton
  • Assets/Core/HandsInteraction/Prefabs/Hands
https://developer.oculus.com/documentation/quest/latest/concepts/unity-sf-handtracking/

Hand

サンプルの中にあるHandsプレハブを置いたら、OVRHandPrefabを消しても手が表示される。

f:id:bibinbaleo:20191223151615p:plain

f:id:bibinbaleo:20191223151636j:plain

InteractableToolsSDKDriver

rayとか人差し指の〇が表示される

f:id:bibinbaleo:20191223153845p:plain

rayをuGUIを反応させるのはどうしたらいいんだろう

CanvasにOVRraycasterを付けただけでは反応しなかった。

NearFieldButton

ボタンはButtonControllerにuGUIと同じような感じでスクリプト付けたりしたら動きます。

下は押したら球が消えるというもの。

f:id:bibinbaleo:20191223153615p:plain

色や音も変えられます。

f:id:bibinbaleo:20191223154016p:plain

f:id:bibinbaleo:20191223130152p:plain

 

ちなみにNearFieldItemsは下ぐらいの位置に置いたらいい感じに動く。

f:id:bibinbaleo:20191223153612p:plain

スクリプトで指の状態を取る

こちらの記事を参考に、指と指がくっついたかどうかのboolとくっつき具合floatを表示しました。

qiita.com

f:id:bibinbaleo:20191223162249j:plain

 

こんな感じのスクリプト

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class HandDebugTest : MonoBehaviour
{
    [SerializeField] Text Text_isIndexPinching;
    [SerializeField] Text Text_middlePinchStrength;
    [SerializeField] OVRHand MYRightHand;
    [SerializeField] OVRHand MYLeftHand;

    void Update()
    {
        bool isIndexPinching = MYRightHand.GetFingerIsPinching(OVRHand.HandFinger.Index);
        Text_isIndexPinching.text = "親指と人差し指:"+isIndexPinching.ToString();
     
        float middlePinchStrength = MYRightHand.GetFingerPinchStrength(OVRHand.HandFinger.Middle);
        Text_middlePinchStrength.text = "中指:" + middlePinchStrength.ToString();
    }
}

OVRHandPrefabについているOVRHandを取得したらよさげ

f:id:bibinbaleo:20191223162228p:plain

最後に

次は何かをつかんだり、指先で何かを書いたりしたい

 

やりました。

bibinbaleo.hatenablog.com