【Vive】コントローラのボタン入力の取得【Unity】
HTC Vive Preのコントローラのボタン入力について
コントローラのプレハブがシーンに追加した後の設定となります。
その辺りはやのせんさんが作られた以下資料を参照。
http://www.slideshare.net/KojiroYano/vive-59807782
トリガー入力のサンプル
下記サンプルをコントローラのプレハブにアタッチします。
SteamVR_TrackedObject trackedObj; void Awake() { trackedObj = GetComponent<SteamVR_TrackedObject>(); } void Update () { var device = SteamVR_Controller.Input((int)trackedObj.index); if (device.GetPressDown(SteamVR_Controller.ButtonMask.Trigger)) { Debug.Log("GetPressDown Trigger"); } }
たったこれだけです。
SteamVR-Extras フォルダ内の SteamVR_TestThrow のスクリプトを参考にしています。
また、コントローラ周りは SteamVR_Controller スクリプトを見れば大体記載してあります。
上記スクリプトではトリガーを押した瞬間のみ反応します。
「GetPressDown」を書き換えればトリガーのタイミングを変更できます。
GetPress | ボタンを押してる間 |
GetPressDown | ボタンを押したとき |
GetPressUp | ボタンを離したとき |
また、ButtonMask.Triggerの「Trigger」部分を書き換えると別のボタン状態を取得できます。
Touchpad | 中央の大きな円形ボタン。タッチパッドとして座標も取得可能 |
ApplicationMenu | タッチパッドの上のボタン |
Grip | グリップボタン |
Trigger | トリガーボタン |
※System、Axisは現時点ではまだよくわかっていないので割愛
タッチパッドについては、「GetTouch」「GetTouchDown」「GetTouchUp」を使うようです。
ただしタッチパッドに触れただけで反応してしまうので、用途によって使い分けます。
タッチパッドの座標の取得
上記スクリプトに書きコードを追加します。
if (device.GetTouch(SteamVR_Controller.ButtonMask.Touchpad))
{
Debug.Log( device.GetAxis() );
}
タッチパッドに触れている間、座標をデバッグログに表示します。
タッチパッドの中央が (0.0) となり、左と下がマイナス、右と上がプラスになります。
Vector2型なので、X座標だけ取得したい場合は「device.GetAxis().x」のように記述します。
バイブレーション
Viveのコントローラは振動させることができます。
if (device.GetPressDown(SteamVR_Controller.ButtonMask.Trigger)) { device.TriggerHapticPulse(2000); }
「TriggerHapticPulse」で振動させます。
振動の強さは渡す値が大きいほど強くなります。
ただし100~2000内の数値となります。
ひとまずコントローラに関してはここまで。