3
0

More than 3 years have passed since last update.

#6「トリガーの押し具合やトラックパッドの位置情報の入力を取得する」【初心者】HTC VIVE Pro Eyeを使ってUnityでVRの開発を行ってみる.

Last updated at Posted at 2021-02-04

はじめに

前回まででボタンが押されているのかの入力を取得したので今回はトリガーの押し具合やトラックパッドの触っている位置座標を取得していく.最初の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.シーンとスクリプトを新規作成する.

Assets内のScenesフォルダを開く.
01.png

①プロジェクトタブ上で右クリックし,②Sceneを新規作成する.
02.png

適当な名前をつける.(今回は1としている)
03.png

各シーンをダブルクリックして切り替えられる.左上のプロジェクト名の右側が開いてるシーン名になっている.
04.png

シーンを作成するとデフォルトでメインカメラが設置されているので右クリックして削除する.
05.png

SteamVR/Prefabsフォルダ内にある[CameraRig]をオブジェクトを置くヒストリータブにドラック&ドロップする.
06.png

無事追加されたら中身を確認すると元々左右のコントローラを制御する用のController(Left)とController(right)が入っている.
07.png

実行してみてコントローラが見れれば作成は問題なく終わっている.
08.png

*注意
VRは動作が不安定になることが多いのでちょくちょく保存しておくように心がける.
09.png

Assetsフォルダ上に戻ってフォルダーを新規作成する.
10.png

プログラムを書いたスクリプトを保存する用のScriptフォルダを作成する.
11.png

作成したScriptフォルダを開いて右クリックしてC# Scriptを新規作成する.
12.png

今回はbooleantestという名前のスクリプトを作成する.
13.png

スクリプトをダブルクリックするとVisual Studioが開いて中身を編集できる.クラス名はファイル名と同じにする.
ファイル名を変更しても勝手に変わってくれないので変えるたびに確認する.
14.png

初期で作られるメソッドとしてStart()とUpdate()が作成されている.
Start():開始と同時に動くプログラムを書く部分.
Update():フレーム毎に動くプログラムを書く部分

他には
Awake():Start()よりも先に呼び出される.
LateUpdate():Update()と同様に1フレームに1回呼び出されるが,Update()がフレームの最初に実行されるのに対してLateUpdate()はフレームのすべての処理が終わった後に実行される.
FixedUpdate():ゲーム内時間での一定間隔で呼ばれる,ゲーム内時間を使用する為,フレームレートに依存せずに制御が行える.
などが代表的なメゾット.いろいろ種類があるので適宜使い分ける.
15.png

変更した後には保存すると反映されるので開きっぱなしでも大丈夫.
29.png

作成したアセットをController(Left)に追加する.
追加されるとインスペクターの一番下に表示される.
16.gif

2.コントローラとUnityの接続設定を行う.

コントローラの値を取得する為に初期設定を行う.
WindowからSteamVR Inputを開く.
16.png

元々ボタン系のアクションは基本用意されている.
17.png

アクションはとりあえず触らずにコントローラのバインド設定を開く.
18.png

開いた際に「Steamを利用できません.一部の機能が無効な可能性があります.」と表示される場合がある.この場合設定を追加できないのでSteamを開いてログインしておく.ログインが終わったらSteamは閉じてしまって大丈夫.
19.png
20.png

ログインされていれば特に警告は表示されないのでバインドの新規作成をする.
21.png

コントローラの設定画面が表示される,元々それぞれのボタンにアクションが割り振られている.もし新しいアクションを入れたい場合にはSteamVR Inputでアクションを追加してそれぞれのボタンに割り当てる.(次の記事で詳細記述)
22.png
23.png

とりあえず今回はそのままで個人用バインドを保存する.もしログインされてないとこのボタンが灰色になっていて押せない.
24.png

名前や説明を変更できるので適宜変更して保存する.
25.png

保存が完了したら左上の戻るボタンを押す.
26.png

自身のアイコンが表示された個人用バインドが作成されてれば大丈夫.
27.png

3.トリガーの入力をフロートで取得する.

WindowからSteamVR Inputを開く.
16.png

アクションの初期状態にはトリガーが元々Squezeとしてあるが今回は実際に作成して割り当ててみる.
01.png

コントローラのバインドセットを見るとアクション内にあるものしか割り当てられないことが分かる.
02.png

そのため,右下の+ボタンからアクションの追加を行う.
03.png

今回はTriggerPullという名前のVector1型(フロート型1つ)の入力を取得する.Requiredはそのアクションが必須かどうかを設定する.必須に設定するとコントローラのバインド設定画面で割り当てられて無いアクションがあると警告が出るようになるが無視できるので好みで設定.
04.png

設定を変更したら保存を行う.
05.png

ポップアップが出るのでSaveする.
06.png

先ほど作ったコントローラの個人バインドを開いてトリガーの設定を削除する.間違って設定して訳が分からなくなっても新規作成すればデフォルトの設定が復活するので消しちゃいます.
一つのボタンに競合する内容でなければ複数個のアクションを割り当てることが出来ます.初期ではトリガーに3個設定が入っています.(弱く推したか,強く推したか,どのぐらい押し込まれているかの3つ)
07.png

すべて削除したら名前の横にある+ボタンからアクションを追加します.
08.png

今回はトリガーをトリガーとして(混乱しそう)設定します.
09.png

トリガーが割り当てられるのでまずはクリックの入力を割り当てます.
9-1.png

今回は元々割り当てられていたIntaract With UIを割り当てます.この入力を得たい場合は前回の記事を読んでください.
10.png

次に今回の主題の一つであるプルの動作を追加します.
11.png

今回新しく作成したtriggerpullを割り当てます.
12.png

次に上述と同じ手順で「TrigerPull」という名前のC#スクリプトを作成してコントローラか[CameraRig]に割り当てておきます.

TrigerPull.cs
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の値で取得することが出来ます.
12.gif

4.トラックパッドの入力を二次元座標で取得する.

先ほど同様にアクションを追加していく.
13.png

今回はTrackPadという名前のVector2型(フロート型2つ)の入力を取得する.
14.png

コントローラのバインド設定を開くと元々十字キーが割り当てられている(他のコントローラーにはトラックパッドがないため?)なので一度削除してしまう.
15.png

トラックパッドの横にある+ボタンからトラックパッドを割り当てる.
16.png

まずはクリック動作を割り振る.
21.png

元々割り当てられていたTeleportを割り振る.この入力を得たい場合は前回の記事を読んでください.
17.png

タッチ操作は今回は飛ばします(割り振っても大丈夫だけど丁度いいアクションがデフォルトになかったので欲しければ作ってください).
次に位置を割り当てる.
18.png

先ほど作ったベクター2アクションであるtrackpadを割り当てます.
19.png

アクションがバインドされてないと警告が出ますが,今回は使わないので無視します.アクションを追加する際の必須の設定はこの表示を出すためのやつです(無視できていいのか...?).
20.png

次に上述と同じ手順で「Trackpad」という名前のC#スクリプトを作成してコントローラか[CameraRig]に割り当てておきます.
問題なく割り当てられていれば,トラックパッド上のどこを触っているのかを二次元座標で得ることが出来ます.エロゲーで使えそう.

Trackpad.cs
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);

    }
}

21.gif

今回は機能の説明のためにいろいろと追加しましたが #6-おまけ「VIVEコントローラを使った開発をする時のおすすめ設定(独断と偏見)」ですべての機能を使うためのおすすめ設定について書いています.
次回はコントローラやHMDの位置と回転を取得します.

3
0
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
  3. You can use dark theme
What you can do with signing up
3
0