始めに
Valve Index Controllerを最近購入しましたので、握る部分の入力をどのようにすれば取得できるかを調べてみました。
用意するもの
Valve Index Controllerを扱うためにアセットのSteamVRを使用しました。
あとはVive Controllerを使う要領でコントローラーのbind設定をしました。
詳しくはこちらを参考にしてください。
指を曲げているかの取得
それぞれの指がどれくらい曲げられているかはSteamVR_Action_Skeleton
から取得できます。
SteamVR_Action_Skeleton.xxxxCurl
(xxxx = 指) で指をどれくらい曲げたかを 0 ~ 1 で取得できます。
試しに値を取得するプログラムを書いてみました。
ValveIndexControllerInputChecker.cs
using UnityEngine;
using UnityEngine.UI;
using Valve.VR;
public class ValveControllerInputChecker : MonoBehaviour
{
[SerializeField] private SteamVR_Action_Skeleton _skeleton;
[SerializeField] private Text[] _texts;
[SerializeField] private SteamVR_Input_Sources _controller;
[SerializeField] private SteamVR_Action_Single _squeeze;
// Update is called once per frame
void Update()
{
CheckFingersCurl();
// グリップを握る力を取得(後述)
_texts[5].text = "Squeeze:" + _squeeze.GetAxis(_controller);
}
private void CheckFingersCurl()
{
_texts[0].text = "親指:" + _skeleton.thumbCurl;
_texts[1].text = "人差し指:" + _skeleton.indexCurl;
_texts[2].text = "中指:" + _skeleton.middleCurl;
_texts[3].text = "薬指:" + _skeleton.ringCurl;
_texts[4].text = "小指:" + _skeleton.pinkyCurl;
}
}
このプログラムを動かした結果が次の通りです。
親指に関してはアナログスティックやタッチパッド、ボタンを押すことでSteamVR_Action_Skeleton.thumbCurl
の値が増えました。が、こちらは値が1まで増えることはありませんでした。
アナログスティックに触れた場合
ボタンを押した場合
人差し指はボタンを押すことでSteamVR_Action_Skeleton.IndexCurl
の値が増えました。
最後に中指、薬指、小指はグリップに指を近づけるだけで値が増加し、グリップに軽く触れるだけで値が1になりました。
グリップを握る力を取得する
Valve Index Controllerではグリップを握る強さを取得することも可能で、やり方はVive Controllerの入力と同じです。
前準備としてコントローラーのBind設定でグリップに力量が設定されているかを確認します。
次にプログラムでSteamVR_Action_Single.GetAxis
を呼び出し、引数SteamVR_Input_Source
で取得するコントローラーを指定します。
SteamVR_Action_Single
はInspectorからBindで設定したものを指定します。
[SerializeField] private SteamVR_Input_Sources _controller; [SerializeField] private SteamVR_Action_Single _squeeze; . . . . . . . . . . _texts[5].text = "Squeeze:" + _squeeze.GetAxis(_controller);
結果として、ある程度強く握らないとsqueeze
の値が 1 になりませんでした。
(体感15kgぐらい?)
最後に
Valve Index コントローラーを試した動画などはいくつか目にしましたが、中指だけ、薬指だけ曲げるのが難しいかと思ていましたが、使ってみてそんなことはなかったです。
ピースしたり、色んな手を容易に作ることが出来ました。
何となくで使い方がわかったので、これからの個人開発で使っていこうと思います。
参考
[Unity] Index / Knuckles Controller Input using SteamVR - YouTube