目次
参考
- SteamVR Unity Plugin v2.2.0でのインプット
- SteamVR Plugin 2.0のコントローラーの入力系の覚え書き
環境
- Unity 2019.1.0f2
- SteamVR Plugin 2.2.0
- プロジェクトへのインポート時に出るダイアログ類は大体YesかAcceptAllする
0.プロジェクト設定
- 0.1.「Edit」→「Project Settings...」でPlayerのXR Settingを有効化、OpenVRが一番上に来るようにしておく。必要があるとかなんとか…

1.Oculusのアクションの設定
- 1.1.「Window」→「SteamVR Input」でダイアログを開く
- 1.2.「Action Sets」の[+]ボタンを押して新しいセットを追加 ※名前は小文字にする必要がある?
- 1.3.「Actions」の[+]タブを押して各アクションを追加していく

Name | Type | |
Trigger | vector1 | |
Trigger_Touch | boolean | |
Grip | vector1 | |
JoyStick | vector2 | |
JoyStick_Touch | boolean | |
JoyStick_Click | boolean | |
Button_A | boolean | |
Button_B | boolean | |
Button_X | boolean | |
Button_X_Touch | boolean | |
Button_Y | boolean | |
Button_Y_Touch | boolean | |
Right_Skeleton | boolean | \skeleton\hand\right |
Left_Skeleton | boolean | \skeleton\hand\left |
※参考サイトに従ってAとBのTouchは用意していないが用意すべきかもしれない
※Skeletonの定義はよくわかってない
※[\skeleton\hand\left]がクリックで選択しても選択できない時があった。何かの拍子に選択できた。プルダウンでright/left切り替えてたらか・・・?選択できないAction削除して再作成したりもした。
※上手くいかない場合、Advanced SettingsからDelete generate input folderして再度generateしてみたり、プロジェクトを再作成する…
※振動させる場合はoutでvibrationの出力を一つ作っておく。
※Skeletonの定義はよくわかってない
※[\skeleton\hand\left]がクリックで選択しても選択できない時があった。何かの拍子に選択できた。プルダウンでright/left切り替えてたらか・・・?選択できないAction削除して再作成したりもした。
※上手くいかない場合、Advanced SettingsからDelete generate input folderして再度generateしてみたり、プロジェクトを再作成する…
※振動させる場合はoutでvibrationの出力を一つ作っておく。
- 1.4.一旦「Save and generate」ボタンで生成する
- 1.5.「Open binding UI」ボタンを押して、ブラウザの画面へ
※ここでブラウザに何も表示されない場合、Actionの設定が誤ってる(コンパイルエラーしてる?っぽい)場合がある。
- 1.6.現在のバインドの「編集」を押して編集画面に入る
※ここで、上部のタブに自分で追加したActionSetの名前が表示されてなかったら何か間違ってるかミスってるかバグ

- 1.7.追加したActionSetを選択して、後は各部の使用方法をそれっぽいのを選んでActionを設定していく。ここで何故かアクションが出ない場合、ActionのType指定とか誤ってるかもしれない。

- 1.8.一通り設定したらデフォルトバインドの置換を実行する?
※ソースコードから察するともしかするといらない可能性もあるなぁ…
- 1.9.ブラウザの設定画面とSteamVR Inputの画面を閉じる
2.入力値を画面に出す
- 2.1.適当なシーンを作成
- 2.2.「SteamVR」→「Prefabs」から[CameraRig]をSceneにドロップして配置する
- 2.3.カメラから見える位置に 3D Text オブジェクトでも浮かべておく
- 2.4.適当なAssetsディレクトリを掘ってC#の新規スクリプトを作成。参考サイトの「SteamVR Plugin 2.0のコントローラーの入力系の覚え書き」のソースコードをもとにデバッグ文成形処理を記述する。
ほぼコピペ、3点変更してある
- 「入力取得方法2 右手」の処理はどうも__actions_系が無さそうな雰囲気なのでコメントアウト+Text2も削除
- Text1は 3D Text配置したのでTextMeshにした。表示できれば何でも良い
- start()内のActivatePrimaryは2.2.0で削除されてるようなので、カンで「myAction.Activate(SteamVR_Input_Sources.Any);」にした。
- using System.Collections;
- using System.Collections.Generic;
- using UnityEngine;
- using UnityEngine.UI;
- using Valve.VR;
-
- public class MyInput : MonoBehaviour
- {
- //取得する手(右手か左手か任意の手)
- public SteamVR_Input_Sources handType;
-
- //default以外のActionSetを取得する
- public SteamVR_ActionSet myAction;
-
- //入力取得方法1定義
- public SteamVR_Action_Single Trigger;
- public SteamVR_Action_Boolean Trigger_Touch;
- public SteamVR_Action_Single Grip;
- public SteamVR_Action_Vector2 JoyStick;
- public SteamVR_Action_Boolean JoyStick_Touch;
- public SteamVR_Action_Boolean JoyStick_Click;
- public SteamVR_Action_Boolean Button_X;
- public SteamVR_Action_Boolean Button_X_Touch;
- public SteamVR_Action_Boolean Button_Y;
- public SteamVR_Action_Boolean Button_Y_Touch;
- public SteamVR_Action_Boolean Button_A;
- public SteamVR_Action_Boolean Button_B;
- public TextMesh text1;
-
- void Start()
- {
- //default以外のActionSetを取得できるように設定
- //myAction.(true);
- myAction.Activate(SteamVR_Input_Sources.Any);
- }
-
- void Update()
- {
- string output = "";
-
- //左手の値を取得するように設定
- handType = SteamVR_Input_Sources.LeftHand;
-
-
- //入力取得方法1 左手
- //Vector1,2,3は変数名.GetAxisで取得
- output += "Trigger = " + Trigger.GetAxis(handType) + "\n";
-
- //booleanは変数名.GetStateで取得
- output += "Trigger_Touch = " + Trigger_Touch.GetState(handType) + "\n";
-
- output += "Grip = " + Grip.GetAxis(handType) + "\n";
- output += "JoyStick = " + JoyStick.GetAxis(handType) + "\n";
- output += "JoyStick_Touch = " + JoyStick_Touch.GetState(handType) + "\n";
- output += "JoyStick_Click = " + JoyStick_Click.GetState(handType) + "\n";
-
- output += "Button_X = " + Button_X.GetState(handType) + "\n";
- output += "Button_X_Touch = " + Button_X_Touch.GetState(handType) + "\n";
- output += "Button_Y = " + Button_Y.GetState(handType) + "\n";
- output += "Button_Y_Touch = " + Button_Y_Touch.GetState(handType);
-
- text1.text = output;
-
- output = "";
-
- //右手の値を取得するように設定
- handType = SteamVR_Input_Sources.RightHand;
-
- //入力取得方法2 右手
- /* #region Input_2
- output += "Trigger = " + SteamVR_Input.__actions_myinput_in_Trigger.GetAxis(handType) + "\n";
- output += "Trigger_Touch = " + SteamVR_Input.__actions_myinput_in_Trigger_Touch.GetState(handType) + "\n";
- output += "Grip = " + SteamVR_Input.__actions_myinput_in_Grip.GetAxis(handType) + "\n";
- output += "JoyStick = " + SteamVR_Input.__actions_myinput_in_JoyStick.GetAxis(handType) + "\n";
- output += "JoyStick_Touch = " + SteamVR_Input.__actions_myinput_in_JoyStick_Touch.GetState(handType) + "\n";
- output += "JoyStick_Click = " + SteamVR_Input.__actions_myinput_in_JoyStick_Click.GetState(handType) + "\n";
-
- output += "Button_A = " + >SteamVR_Input.__actions_myinput_in_Button_A.GetState(handType) + "\n";
- output += "Button_B = " + SteamVR_Input.__actions_myinput_in_Button_B.GetState(handType);
-
- text2.text = output;
- */
- }
- }
-
- 2.5.作成したスクリプトを適当に空オブジェクトを作って貼り付け
- 2.6.スクリプト貼り付けたオブジェクトクリックして、スクリプトのパブリック変数を全部インスペクターウインドウで埋める。
※プルダウンからそれらしい名前のを一通り選択するだけでいい。myActionは作成したActionSet名を指定する。
※テキストオブジェクトだけ貼り付けた3D Textなどをドロップして設定してやる
※テキストオブジェクトだけ貼り付けた3D Textなどをドロップして設定してやる

とりあえず値が取れてるのでヨシ
謝辞
本ページ内で使用されているUnity-Chan!は以下の著作・ライセンスの元使用しています。
© Unity Technologies Japan/UCL
http://unity-chan.com/contents/license_jp/
本ページ内で使用されているUnity-Chan!は以下の著作・ライセンスの元使用しています。
© Unity Technologies Japan/UCL
http://unity-chan.com/contents/license_jp/