はじめに
前回まででボタンが押されているのかの入力を取得したので今回はトリガーの押し具合やトラックパッドの触っている位置座標を取得していく.最初の1章2章は前回と同じ内容なので読み飛ばしても大丈夫.
環境一覧
SteamVR 1.16.10
Unity 2019.4.27f1 or 2020.1.17f1(動作確認済み,非対応なSDKあり)
SteamVR Plugin 2.7.3
Vive SRanipalRuntime Plugin 1.3.2.0
追加アクセサリー
VIVEトラッカー2018
Ovrvision Pro(ステレオカメラ)
Leap Motion
使用PCスペック
インテル® Core™ i7-7700K
NVIDIA GeForce GTX 1070
- 環境作成編
#1 Unityのセットアップをする 2021年 1月更新
#2 プロジェクトを作ってみる 2021年 1月更新
#3-α Unity2019でVR開発のための環境を整える(SteamVR Plugin2.7.Xをインストールする):推奨 2021年 6月更新
#3-β Unity2020でVR開発のための環境を整える(SteamVR Plugin2.7.Xをインストールする) 2021年 5月更新
#3-おまけ UnityでVR開発のための環境を整える(SteamVR Pluginの最新版をインストールする):非推奨 2021年 2月更新
#4 SteamVRのダウングレードと自動アップデートの停止(上級者向け) 2021年 5月更新
- コントローラの入力やトラッカー,HMDの位置座標,回転座標を得る+α
#5 VIVEコントローラのボタン入力を取得する 2021年 2月更新
#6 トリガーの押し具合やトラックパッドの位置情報の入力を取得する(この記事) 2021年 2月更新
#6-おまけ VIVEコントローラを使った開発をする時のおすすめ設定(独断と偏見) 2021年 5月更新
#7 ヘッドマウントディスプレイとコントローラの位置座標と回転を取得する 2021年 2月更新
#8 VIVEトラッカー2018を有効化してUnity上で位置座標と回転を取得 2021年 5月更新
#9 VIVEコントローラの振動機能を開発してみる 2021年 4月更新
- VIVE Pro Eyeのアイトラッキングを使ってみる
#10 VIVE Pro Eyeの視線トラッキングを有効化(セットアップ)する 2021年 4月更新
#11 VIVE Pro Eyeのアイトラッキングを使ってUnity上で瞬きや視線のデータを取得する 2021年 4月更新
#11-おまけ VIVE Pro Eyeのアイトラッキングで計測できるデータについて(適宜更新) 2021年 4月更新
- VIVE Pro Eyeのカメラを使ってみる
#12 VIVE Pro Eyeのフロントカメラの解像度(性能)とAR機能を有効化について 2021年 5月更新
- 小技
プレイエリアの境界線(シャペロン境界)が表示されないように設定を変更する 2021年 6月更新
Unity上でカメラを複数台追加してHMDやコントローラの動きを見る 2021年 6月更新
- Ovrvision Pro(ステレオカメラ)を使ってAR開発してみる
$1-1 Ovrvision Pro(ステレオカメラ)のセットアップをして実際に動かしてみる 2021年 6月更新
$1-2 Ovrvision Pro(ステレオカメラ)とHMDを使ってARアプリ開発する 2021年 6月更新
- Leap Motionを使ってハンドトラッキングしてみる
$2-1 Leap Motion(ハンドトラッキング)のセットアップをして実際に動かしてみる 2021年 6月更新
$2-2 Leap Motion(ハンドトラッキング)とHMDを使ったインタラクティブなアプリ開発する 2021年 6月更新
- アプリを作ってみる
VR(仮想空間)上に曲面ディスプレイを作成して大画面で広角WEBカメラ映像を見る 2021年 5月更新
今回の記事では,
1.シーンとスクリプトを新規作成する.
2.コントローラとUnityの接続設定を行う.
3.トリガーの入力をフロートで取得する.
4.トラックパッドの入力を二次元座標で取得する.
という流れ.
1.シーンとスクリプトを新規作成する.
①プロジェクトタブ上で右クリックし,②Sceneを新規作成する.
各シーンをダブルクリックして切り替えられる.左上のプロジェクト名の右側が開いてるシーン名になっている.
シーンを作成するとデフォルトでメインカメラが設置されているので右クリックして削除する.
SteamVR/Prefabsフォルダ内にある[CameraRig]をオブジェクトを置くヒストリータブにドラック&ドロップする.
無事追加されたら中身を確認すると元々左右のコントローラを制御する用のController(Left)とController(right)が入っている.
実行してみてコントローラが見れれば作成は問題なく終わっている.
*注意
VRは動作が不安定になることが多いのでちょくちょく保存しておくように心がける.
プログラムを書いたスクリプトを保存する用のScriptフォルダを作成する.
作成したScriptフォルダを開いて右クリックしてC# Scriptを新規作成する.
今回はbooleantestという名前のスクリプトを作成する.
スクリプトをダブルクリックするとVisual Studioが開いて中身を編集できる.クラス名はファイル名と同じにする.
ファイル名を変更しても勝手に変わってくれないので変えるたびに確認する.
初期で作られるメソッドとしてStart()とUpdate()が作成されている.
Start():開始と同時に動くプログラムを書く部分.
Update():フレーム毎に動くプログラムを書く部分
他には
Awake():Start()よりも先に呼び出される.
LateUpdate():Update()と同様に1フレームに1回呼び出されるが,Update()がフレームの最初に実行されるのに対してLateUpdate()はフレームのすべての処理が終わった後に実行される.
FixedUpdate():ゲーム内時間での一定間隔で呼ばれる,ゲーム内時間を使用する為,フレームレートに依存せずに制御が行える.
などが代表的なメゾット.いろいろ種類があるので適宜使い分ける.
変更した後には保存すると反映されるので開きっぱなしでも大丈夫.
作成したアセットをController(Left)に追加する.
追加されるとインスペクターの一番下に表示される.
2.コントローラとUnityの接続設定を行う.
コントローラの値を取得する為に初期設定を行う.
WindowからSteamVR Inputを開く.
アクションはとりあえず触らずにコントローラのバインド設定を開く.
開いた際に「Steamを利用できません.一部の機能が無効な可能性があります.」と表示される場合がある.この場合設定を追加できないのでSteamを開いてログインしておく.ログインが終わったらSteamは閉じてしまって大丈夫.
ログインされていれば特に警告は表示されないのでバインドの新規作成をする.
コントローラの設定画面が表示される,元々それぞれのボタンにアクションが割り振られている.もし新しいアクションを入れたい場合にはSteamVR Inputでアクションを追加してそれぞれのボタンに割り当てる.(次の記事で詳細記述)
とりあえず今回はそのままで個人用バインドを保存する.もしログインされてないとこのボタンが灰色になっていて押せない.
自身のアイコンが表示された個人用バインドが作成されてれば大丈夫.
3.トリガーの入力をフロートで取得する.
アクションの初期状態にはトリガーが元々Squezeとしてあるが今回は実際に作成して割り当ててみる.
コントローラのバインドセットを見るとアクション内にあるものしか割り当てられないことが分かる.
今回はTriggerPullという名前のVector1型(フロート型1つ)の入力を取得する.Requiredはそのアクションが必須かどうかを設定する.必須に設定するとコントローラのバインド設定画面で割り当てられて無いアクションがあると警告が出るようになるが無視できるので好みで設定.
先ほど作ったコントローラの個人バインドを開いてトリガーの設定を削除する.間違って設定して訳が分からなくなっても新規作成すればデフォルトの設定が復活するので消しちゃいます.
一つのボタンに競合する内容でなければ複数個のアクションを割り当てることが出来ます.初期ではトリガーに3個設定が入っています.(弱く推したか,強く推したか,どのぐらい押し込まれているかの3つ)
すべて削除したら名前の横にある+ボタンからアクションを追加します.
トリガーが割り当てられるのでまずはクリックの入力を割り当てます.
今回は元々割り当てられていたIntaract With UIを割り当てます.この入力を得たい場合は前回の記事を読んでください.
次に上述と同じ手順で「TrigerPull」という名前のC#スクリプトを作成してコントローラか[CameraRig]に割り当てておきます.
using System;
using UnityEngine;
using Valve.VR;
//クラス名はファイル名(今回はTrigerPull)
public class TrigerPull : MonoBehaviour
{
//トリガーがどれだけ押されているのかを取得するためのtriggerpullという関数にSteamVR_Actions.default_TriggerPullを固定
private SteamVR_Action_Single triggerpull = SteamVR_Actions.default_TriggerPull;
//結果の格納用floot型関数
private float pullleft, pullright;
//1フレーム毎に呼び出されるUpdateメゾット
void Update()
{
//結果をGetLastAxisで取得してpullleftに格納
//SteamVR_Input_Sources.機器名(ここは左コントローラ)
pullleft = triggerpull.GetLastAxis(SteamVR_Input_Sources.LeftHand);
//pullleftの中身を確認
Debug.Log("Left:" + pullleft);
//結果をGetLastAxisで取得してpullrightに格納
//SteamVR_Input_Sources.機器名(ここは右コントローラ)
pullright = triggerpull.GetLastAxis(SteamVR_Input_Sources.RightHand);
//pullrightの中身を確認
Debug.Log("Right:" + pullright);
}
}
問題なくアクションが設定されていればトリガーの押し具合を0-1の値で取得することが出来ます.
4.トラックパッドの入力を二次元座標で取得する.
今回はTrackPadという名前のVector2型(フロート型2つ)の入力を取得する.
コントローラのバインド設定を開くと元々十字キーが割り当てられている(他のコントローラーにはトラックパッドがないため?)なので一度削除してしまう.
トラックパッドの横にある+ボタンからトラックパッドを割り当てる.
元々割り当てられていたTeleportを割り振る.この入力を得たい場合は前回の記事を読んでください.
タッチ操作は今回は飛ばします(割り振っても大丈夫だけど丁度いいアクションがデフォルトになかったので欲しければ作ってください).
次に位置を割り当てる.
先ほど作ったベクター2アクションであるtrackpadを割り当てます.
アクションがバインドされてないと警告が出ますが,今回は使わないので無視します.アクションを追加する際の必須の設定はこの表示を出すためのやつです(無視できていいのか...?).
次に上述と同じ手順で「Trackpad」という名前のC#スクリプトを作成してコントローラか[CameraRig]に割り当てておきます.
問題なく割り当てられていれば,トラックパッド上のどこを触っているのかを二次元座標で得ることが出来ます.エロゲーで使えそう.
using System;
using UnityEngine;
using Valve.VR;
//クラス名はファイル名(今回はTrackpad)
public class Trackpad : MonoBehaviour
{
//パッドのどこを触っているのかを取得するためのTrackPadという関数にSteamVR_Actions.default_TrackPadを固定
private SteamVR_Action_Vector2 TrackPad = SteamVR_Actions.default_TrackPad;
//結果の格納用Vector2型関数
private Vector2 posleft, posright;
//1フレーム毎に呼び出されるUpdateメゾット
void Update()
{
//結果をGetLastAxisで取得してposleftに格納
//SteamVR_Input_Sources.機器名(ここは左コントローラ)
posleft = TrackPad.GetLastAxis(SteamVR_Input_Sources.LeftHand);
//posleftの中身を確認
Debug.Log(posleft.x + " " + posleft.y);
//結果をGetLastAxisで取得してposrightに格納
//SteamVR_Input_Sources.機器名(ここは右コントローラ)
posright = TrackPad.GetLastAxis(SteamVR_Input_Sources.RightHand);
//posleftの中身を確認
Debug.Log(posright.x + " " + posright.y);
}
}
今回は機能の説明のためにいろいろと追加しましたが #6-おまけ「VIVEコントローラを使った開発をする時のおすすめ設定(独断と偏見)」ですべての機能を使うためのおすすめ設定について書いています.
次回はコントローラやHMDの位置と回転を取得します.