LoginSignup
3
1

More than 5 years have passed since last update.

FirstVRでHello World

Posted at

概要

今回は、FirstVRというデバイスを手に入れることができたのでHello Worldしたまとめです。

FirstVRとは

FirstVRとはH2Lが開発している「筋変位センサ搭載コントローラ」です。
VRと名前がついている通り、VRコンテンツで利用することを想定されたデバイスです。

↓こんな感じのやつ。ゴーグルもセットでついてきます。
FirstVR

着脱に関しては時計みたいにして腕につける形のデバイスです。
ジャイロを搭載しており、3軸での回転と、グー・パーなどのジェスチャ、そして空間をスワイプしたことを検知するなど意外と色々とデータを取得できるデバイスになっています。

↓実際に手のモデルを動かしてみた例。わりとしっかり動いてる。

比較的スムーズに接続してくれます。
(VR向けを想定したデバイスですが、意外とVR以外でも使いみちがありそうな感じ)

今回はまず、動画のように手をトラッキングする部分だけを作ってみたのでHelloWorld的な部分を書いてみたいと思います。
(後日、ちょっとしたアプリを作るので、それについてはまたまとめる予定)

セットアップ

まず、開発者サイトからSDKをダウンロードします。
現在はUnity向けのみ提供とのこと。

Unityパッケージをimportすると、FVRというフォルダに色々入っているので、まずは必要なPrefabだけをシーンに配置します。

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つの項目は、それぞれ「手がどういう状態にあるか」を教えてくれます。
まずverticalOrientationUpDownなどの「手の縦方向の状態」を教えてくれます。
コンテンツを作る際に、手が下を向いたら、みたいな判定に使えそうですね。

次に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();
        }
    }
}

この他にも注目する機能としてカスタムジェスチャーがあります。
ジェスチャの状態を登録することで、グー・チョキ・パーなどの状態を判別することが可能なようです。

上で紹介したコンテンツはまさにグーとパーの状態を判別して気孔弾を撃つ、というコンテンツなので次回はそのコンテンツの簡易的なものの制作について+カスタムジェスチャについて書きたいと思います。

3
1
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
1