概要
今回は、FirstVRというデバイスを手に入れることができたのでHello Worldしたまとめです。
FirstVRとは
FirstVRとはH2Lが開発している「筋変位センサ搭載コントローラ」です。
VRと名前がついている通り、VRコンテンツで利用することを想定されたデバイスです。
着脱に関しては時計みたいにして腕につける形のデバイスです。
ジャイロを搭載しており、3軸での回転と、グー・パーなどのジェスチャ、そして空間をスワイプしたことを検知するなど意外と色々とデータを取得できるデバイスになっています。
↓実際に手のモデルを動かしてみた例。わりとしっかり動いてる。
比較的スムーズに接続してくれます。
(VR向けを想定したデバイスですが、意外とVR以外でも使いみちがありそうな感じ)
今回はまず、動画のように手をトラッキングする部分だけを作ってみたのでHelloWorld的な部分を書いてみたいと思います。
(後日、ちょっとしたアプリを作るので、それについてはまたまとめる予定)
セットアップ
まず、開発者サイトからSDKをダウンロードします。
現在はUnity向けのみ提供とのこと。
Unityパッケージをimportすると、FVRというフォルダに色々入っているので、まずは必要なPrefabだけをシーンに配置します。
ConnectionCheck
のPrefabはUICanvas
にリネームしてますが同じPrefabです。
FirstVRデバイスへの接続へはこれで準備完了です。
ただ、内部的に接続していてもなにも面白くないので、コンテンツ制作に使えそうな値を出力してみます。
FVRConnectionクラスから色々取得してみる
FVRConnection
がデバイスとのインターフェースになっていて、色々と情報を取得することができます。
先の動画でも、手の回転といくつかのパラメータが表示されていましたが、それはそれぞれ以下のように取得することができます。
private void Update()
{
_target.rotation = _fvr.centeredRotation;
_vertText.text = _fvr.verticalOrientation.ToString();
_horiText.text = _fvr.horizontalOrientation.ToString();
_palmText.text = _fvr.palmOrientation.ToString();
}
centeredRotation
でジャイロによる回転値を、UnityのRotationに与えることができます。
これによって動画の手の回転のように、オブジェクトの回転として利用することができます。
続く3つの項目は、それぞれ「手がどういう状態にあるか」を教えてくれます。
まずverticalOrientation
はUp
、Down
などの「手の縦方向の状態」を教えてくれます。
コンテンツを作る際に、手が下を向いたら、みたいな判定に使えそうですね。
次にhorizontalOrientation
は「手の横方向の状態」を教えてくれます。
手を左右に振ったときに、左と右どちらを向いているか、などです。
ジャスト左右だけでなく、やや前方向に手がある場合はfront left
などと表示してくれるので結構細かく値が取れそうです。
そして最後のpalmOrientation
ですが、これはそのまま「手のひらの向き」です。
Up
なら上向き、Down
なら下向き。そしてSide
は横を向いている、という状態を教えてくれます。
このへんの値が取れると、以前、Oculus DK2の時代に作ったコンテンツを、それっぽく移植できそうなのでやってみようかなw
Recenterでモデルの回転を初期化する
さて最後に、動画でもタップしてリセンターしていますが、リセンターについてはとても簡単です。
以下のようにRecenter
メソッドを呼ぶだけです。
private void Update()
{
// ... 中略 ...
if (Input.touchCount > 0)
{
Touch touch = Input.touches[0];
if (touch.phase == TouchPhase.Began)
{
_fvr.Recenter();
}
}
}
この他にも注目する機能としてカスタムジェスチャーがあります。
ジェスチャの状態を登録することで、グー・チョキ・パーなどの状態を判別することが可能なようです。
上で紹介したコンテンツはまさにグーとパーの状態を判別して気孔弾を撃つ、というコンテンツなので次回はそのコンテンツの簡易的なものの制作について+カスタムジェスチャについて書きたいと思います。