UnityでValveIndexコントローラーの指入力を取る


UnityでValveIndexコントローラーの指入力を取る方法です

前提条件

  • SteamVRは2.0以降を使用します
  • Action Setsはdefaultを使用します

実行環境

  • Windows10
  • Unity 2019.2.8f1
  • SteamVR Plugin 2.5.0

SteamVR Inputの設定

Asset StoreでSteamVRをimport後、メニューの「Window」タブから「SteamVR Input」を選択します

actions.jsonが無いみたいなことを言われるので、「Yes」を選択します

SteamVR Inputが開けたら、「Save and generate」を選択します

スクリプトの作成

InputTest.cs
using UnityEngine;
using Valve.VR;

public class InputTest : MonoBehaviour
{
    // 指の入力
    public SteamVR_Action_Skeleton actionSkeleton;

    void Update()
    {
        Debug.Log(
            "親指:" + actionSkeleton.thumbCurl +
            "人差し指:" + actionSkeleton.indexCurl +
            "中指:"+actionSkeleton.middleCurl +
            "薬指:"+actionSkeleton.ringCurl +
            "小指:"+actionSkeleton.pinkyCurl
            );
    }
}

SteamVR_Action_Skeleton

指の入力アクションの状態を取ってくるためのクラスです

thumbCurl~pinkyCurl

それぞれの指をどれだけ握っているか「0~1.0」のfloat値で表現されます

パラメータ 説明
thumbCurl 親指の握りを表します
親指の値は少し特殊で、以下のような値が入ります
・スティックに指を置いた場合:約0.4
・タッチパッドに指を置いた場合:約0.5
・ボタンに指を置いた場合:約0.8
indexCurl 人差し指の握りを表します
middleCurl 中指の握りを表します
ringCurl 薬指の握りを表します
pinkyCurl 小指の握りを表します

実行の準備

Main Cameraを削除して[CameraRig]をHierarchyに追加します

適当にGameObjectを作成して先ほど作成したスクリプト「InputTest.cs」をアタッチします
inspectorから指の入力を取得する手を選択します
今回は左手の指入力を取得するので「\action\default\in\SkeletonLeftHand」を選択します

実行

ゲームを再生して左手のValveIndexコントローラーを握ると、デバッグログの値が変化します

参考サイト

Class SteamVR_Action_Skeleton