UnityでOculus IntegrationのSampleFrameworkを使ってOculus Questのハンドトラッキングを試す (2)


はじめに

前回は、トリガーアクションでキューブの色を変えました。
UnityでOculus IntegrationのSampleFrameworkを使ってOculus Questのハンドトラッキングを試す

今回は、SampleFrameworkのHandsを使って、ピンチ幅の取得してみます。
ついでにAll Valid Tools Tagsを変更し、それぞれどのような動きになるかも試します。

Handsで使えそうなもの

Hands.cs

表示タイプを切り替える
Hands.Instance.SwitchVisualization();

左右取得
Hands.Instance.LeftHand
Hands.Instance.RightHand

Hand.cs

Handsから左右のhandを取得し、それぞれに実行できる

ピンチ幅取得
hand.PinchStrength(OVRPlugin.HandFinger.Middle)

スケルトン表示
hand.PinchStrength(OVRPlugin.HandFinger.Middle)

ピンチ操作

MyHand.csスクリプトを作り、Handsに追加しておく

MyHand.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using OculusSampleFramework;

public class MyHand : MonoBehaviour
{
    private Renderer renderer;

    void Start()
    {
        renderer = GameObject.Find("CubeButtonRay").GetComponent<Renderer>();
    }

    void Update()
    {
        if (Hands.Instance.LeftHand.PinchStrength(OVRPlugin.HandFinger.Middle) > 0.9f)
        {
            renderer.material.color = Color.black;
        }
        else if (renderer.material.color == Color.black)
        {
            renderer.material.color = Color.white;
        }
    }
}

using OculusSampleFramework で Handsが使える
中指をピンチしたらキューブの色を黒にする
離したら白にする

表示タイプを切り替えてみる

ButtonController の Interactable State Change で Hands の SwitchVisualization を呼び出す

キューブを選択したら手の表示が切り替わる

All Valid Tools Tags

前回はすべてAllにしていたので、キューブを複製し、Ray,Poke,Pinchをそれぞれ配置してみました

All

RayでもPokeでも動く

Ray

ちょっと離れないと選択できない
線が当たると吸い付くので意外と選択しやすかった

Poke

直接触ると発火する
線が当たっても吸い付かない

Pinch

どうやって動くの?

さいごに

あとは自由に作ってみよう!
ハンドトラッキングのメニュー表示をかっこよくしたい。
アバターの移動はどうやって操作しよう。
手を見失ったときの挙動を考えたい。