search
LoginSignup
35

More than 3 years have passed since last update.

posted at

updated at

SteamVR Plugin 2.0 Input取得・入力関連スクリプト読み解き

はじめに

  • この記事はSteamVR Plugin 2.0でのコントローラーの入力取得するためのHow toをまとめました。
  • SteamVR Pluginでコントローラーの入力を取るところだけ取り扱っています。

開発環境

  • Windouws 10 x64
  • Unity v2018.2.11f1
  • Visual Studio 2017 v15.8.6
  • SteamVR Plugin v2.0.1

セットアップ

本題

入力方法その1

  • SteamVR Pluginのドキュメントpdfです。

とりあえず動作確認

  • GrabAction.GetStateを確認します。
using UnityEngine;
using Valve.VR;

public class SteamVRInputTest : MonoBehaviour
{
    public SteamVR_Input_Sources HandType;
    public SteamVR_Action_Boolean GrabAction;

    void Update ()
    {
        if (GrabAction.GetState(HandType))
        {
            Debug.Log(GrabAction.ToString());
        }
    }
}

image.png

  • SteamVR_Input_SourcesをAnyに設定(そのまま)

  • SteamVR_Action_BooleanをGrabGripに設定。

image.png

  • 実行してコントローラーのグリップを握ると・・・
  • 取れました。

image.png

SteamVR_Input_Sources

  • コントローラーのどちらかの手、もしくは両手とも判定を行うかどうかを指定するための物ですね。
//======= Copyright (c) Valve Corporation, All rights reserved. ===============
public enum SteamVR_Input_Sources
{
    [Description("/unrestricted")] //todo: check to see if this gets exported: k_ulInvalidInputHandle 
    Any,

    [Description("/user/hand/left")]
    LeftHand,

    [Description("/user/hand/right")]
    RightHand,
}

SteamVR_Action_Boolean

  • SteamVR_Action_〇〇〇〇は、アクションの状態を取ってくるための物みたいですね

  • ドキュメントから。

image.png

  • SteamVR > Inputフォルダから確認できます。

image.png

  • とりあえず動かす事が出来ました。
  • ドキュメントを読み進めて行くと、似たような形でもっと簡単に取れそうでした。

入力方法その2

  • 入力方法その2と書きましたが、実際にはActionの取得方法が違うだけで入力の取得方法は共通です。
  • ドキュメントから。

image.png

  • スクリプトだけで取得できます。
  • 今までのSteamVR_TrackedObjectとSteamVR_Controllerでデバイス取ってから実際の入力取るまでの、面倒な数行がきれいさっぱり1行になって良さそうですね。

実際に動かしてみる

public class SteamVRInputTest : MonoBehaviour
{
    public SteamVR_Input_Sources HandType;

    void Update ()
    {
        if (SteamVR_Input._default.inActions.GrabGrip.GetStateUp(HandType))
        {
            Debug.Log("GrabGrip.GetStateUp");
        }
    }
}
  • 簡単に取れました!

image.png

  • Gripを握って、離した瞬間に出ました。
  • 名前の付け方から見てInput.GetKeyUpと同じような使い方ですね。

  • 以下のスクリプトで同じように取得できるのを確認しました。

public class SteamVRInputTest : MonoBehaviour
{
    public SteamVR_Input_Sources HandType;

    void Update ()
    {
        if (SteamVR_Input._default.inActions.GrabGrip.GetStateUp(HandType))
        {
            Debug.Log("GrabGrip.GetStateUp");
        }
        if (SteamVR_Input._default.inActions.GrabGrip.GetStateDown(HandType))
        {
            Debug.Log("GrabGrip.GetStateDown");
        }

        if (SteamVR_Input._default.inActions.GrabGrip.GetState(HandType))
        {
            Debug.Log("GrabGrip.GetState = true");
        }
        else
        {
            Debug.Log("GrabGrip.GetState = false");
        }
    }
}
  • GetStateUp
    • 操作ボタンを離したときだけtrueが帰る。それ以外はfalse。
    • trueが帰ってくるのは1フレームのみ。
  • GetStateDown
    • 操作ボタンを押下した時だけtrueが帰る。それ以外はfalse。
    • trueが帰ってくるのは1フレームのみ。
  • GetState

    • 押されてればtrue、押されてなければfalseが帰る。
  • GrabGripの部分をTeleportやGrabPinchに変更すれば、その入力を取ることが出来ました。

if (SteamVR_Input._default.inActions.Teleport.GetStateUp(HandType))
{
    Debug.Log("Teleport.GetStateUp");
}

image.png

  • デフォルトのキーバインドだとトラックパッドのクリックを離すタイミングでログが出ます。

おわりに

  • これで、最低限SteamVR Plugin 2.0の入力が取れるようになったと思います。
  • 以前と比べるとシンプルで、良いですね。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
35