今年5月23日、サムスン電子ジャパンがGear VRヘッドセットの最新版「Galaxy Gear VR with Controller」を発売しました。

最初のバージョンから5世代目の「Gear VR」となりますが、ヘッドセット本体は第4世代と変わりません。最大の特徴は、付属しているBluetooth接続のGear VR Controller(以下、Gear VR コントローラ)です。Gear VR コントローラ単体でも発売されています(5,000円弱)。

今回はこのGear VR コントローラについて解説します。

大きさの比較対象として、VIVE Controller、Oculus Touchと並べてみました。タッチパッドに十分な大きさがあるのがわかります。

モバイルVRコントローラの課題

現状のモバイルVR最大の難点はコントローラです。Gear VR ヘッドセットにはタッチパッドがあるのでそこである程度の操作はできますが、まだ課題はありました。

1つ目の課題は「ポインティング」。 コントローラがない場合のポインティング手法は、画面中央を視点とみなす仕組み「Gaze」が主な方法です。「頭を動かしてカーソル移動」というのは慣れるとある程度操作できるようになりますが、コントローラを持っている場合に比べるとやはり良い体験ではありません。

2つ目の課題はいわゆる「ゴリラ腕問題」。 GearVRの横にはタッチパッドがありますが、タッチする操作のためにヘッドセットの横にずっと手を添えておくのは想像以上に苦痛です。

これらの解決策としては、一般的なBluetoothゲームパッドでも有力でした。パッドでカーソルを移動して、ボタンを押して入力できる、という仕組みは、HMD横のタッチパッドよりも快適です。

しかし、現在出ているコントローラを色々試すと、VR空間でのポインティングデバイスは、Oculus Touch、Vive Controllerのように、やはり指示棒のように使えるコントローラが直感的で良いことがわかります。これらのコントローラほどのトラッキング性能はありませんが、それでも実用的なデバイスとしてGear VR コントローラが出てきたことは評価できます。

Gear VR コントローラの仕組み

Gear VR コントローラには、クリック可能なトラックパッド、トリガー、ホームボタン、バックボタン、音量調整ボタンが付き、さらに3自由度の加速度センサーが入っています。 残念ながら現状では位置トラッキングの仕組みは備えておらず、方向のみが操作可能なコントローラなので、剣のように振り回すことは想定されていません。

それでも実物を触ってみると、想像していたよりは良い感じで、Oculus Home画面等で、アイコンを選択したりするには十分実用的です。

Oculus Storeで「Dead and Buried」というゲームが無料で入手できますので、購入した方は是非試してみてください。

画像はゲームの公式サイトのキャプチャ

今回は、このGear VRのコントローラを使ったVRコンテンツの作り方を説明したいと思います。

開発環境

今回試した開発環境は次のようになります。

  • macOS 10.12.6
  • Unity 2017.1.0f3

第7回の記事を参考にAndroidアプリ開発環境を整え、第7回と同様にサンプルプロジェクトButtonsを作成し、その中にシーンButtonsを作成してください。

最後に、Virtual Reality SupportedチェックをONにしたあと、SDKを選択するリストが表示されますが、ここはOculusを選択しておきます。

SDKのダウンロード

ここからコントローラ対応を進めていきます。

まず、下記ページよりOculus Utilitiesをダウンロードします。

本原稿執筆時(2017年9月)の最新バージョンは、1.16.0-betaですが、私の現在の環境ではうまく動作しなかった(ビルド出来なくなった)ので、1.15.0をダウンロードして使用しました。

上記ページのバージョン番号横にある三角ボタン(▼)を押して表示されるプルダウンより1.15.0を選択してダウンロードできます。直接リンクは下記になります。

「Assets > Import Package > Custom Package…」で先ほどダウンロードしたzip内にある「OculusUtilities.unitypackage」を選択します。すべてを選択した状態でImportボタンを押して、プロジェクトに取り込みます。

VRカメラの準備

Main Cameraを削除し、代わりに、Assets/OVR/Prefabs/OVRCameraRigをシーンに配置します。 位置は、x:0, y:1.6, z:0くらいに配置します(視点の高さが160cmくらいになります)。

これでビルドしてできるapkファイルをGear VRに挿し込むとVRとして動作します。

このオブジェクトOVRCameraRigがHMDそのものとなります。OVRCameraRigの子階層を開いていくとLeftHandAnchor、RightHandAnchorというオブジェクトがあるのが確認できます。

これがそれぞれ左手、右手の位置に対応します。試しにこれらの子オブジェクトに座標系が分かりやすいモデルを入れてみると、下のGIFのような動作を確認することができます。

コントローラの向いている方向は+Z方向ということもわかりますので、必要ならZ方向に指示棒の・ようなものを出すと良いでしょう。

Controllerのモデル表示と入力取得

Oculus Utilitiesアセットには、Gear VR Controllerのモデルデータも含まれていますので、これをLeftHandAnchor、RightHandAnchorそれぞれのオブジェクトの下にアタッチします。

これで、リアルなコントローラがVR空間に表示されるようになります。

続いてコントローラの入力をスクリプトから取得してみます。取得の参考になるスクリプトは、Assets/OVR/Scripts/Util/OVRGearVrControllerTestに記述されているStart関数です。

ボタンの入力を独自に取得する方法がわかりますが、このソースを参考にした便利なコードをまとめておきます。

トリガーを引いた瞬間と、引いている状態を取得するコード

if (OVRInput.GetDown (OVRInput.Button.PrimaryIndexTrigger)) {
    // トリガーが引かれた瞬間.
    str += "[Trigger!!!]";
}
else if (OVRInput.Get (OVRInput.Button.PrimaryIndexTrigger)) {
    // トリガーが引かれている.
    str += "[Trigger]";
}

タッチパッドをタッチした瞬間と、触れている状態を取得するコード

if (OVRInput.GetDown (OVRInput.Button.PrimaryTouchpad)) {
    // タッチパッドがクリックされた.
    str += "[Click!!!]";
}
else if (OVRInput.Get (OVRInput.Touch.PrimaryTouchpad)) {
    // タッチパッドに指が触れている.
    str += "[Touch]";
}

タッチパッドのタッチ位置を取得するコード

// タッチパッドのタッチ位置(左下 (-1,-1)、右上 (+1,+1))
Vector2 pt = OVRInput.Get(OVRInput.Axis2D.PrimaryTouchpad);
string  str = string.Format("PrimaryTouchpad: ({0:F2}, {1:F2})\n", pt.x, pt.y);

これでGear VR コントローラを使用したコンテンツを作り始めることはできるでしょう。

Gear VR コントローラのリセット

とても便利なGear VR コントローラですが、一点だけ問題があります。それは、しばらく(数分~十数分)使っていると、次第に方向がずれていくことです。外部センサー等がないデバイスでは、ある程度しょうがない問題です。

ただ、簡単に方向をリセットする方法は準備されており、最初のチュートリアルでも説明されます。

Gear VRコントローラを正面に向けた状態で、ホームボタン(家の形のボタン)を長押しするとリセットされます。これは覚えておきましょう。

事例紹介

英会話のイーオンが7月にリリース済みの「英語でおもてなしガイド」がVRに対応しています。 360度動画ではなく、3DCGの中に書き割りのような写真を切り抜いた人が口をパクパクさせるシンプルなものです。

しかしやってみると分かるのですが、ただの画面を見ながら操作するのとは全く違い、人前で喋るような緊張感を味わえます。 データ容量が膨らみがちな360度動画よりもシンプルで、もしかしたらこの手法はいろいろなアプリで使えるかもしれません。

  • Bアプリ名 : 「英語でおもてなしガイド(VR対応)」
  • 対応プラットフォーム : iPhone、Android
  • 料金 : 月額課金制980円(税込)、chapter1は無料

著者紹介


山田宏道 (YAMADA Hiromichi) - 株式会社トルクス 代表取締役

千葉大学工学部卒業。ゲームプログラマーを経て、2005年よりフリーランス。2012年 株式会社トルクスを設立し、コンシューマー向け、ビジネス向けを問わず、さまざまなアプリを受託開発している。

現在、VR関連技術に注力中。2016年4月より島根県奥出雲町に在住。山陰エリアでUnityやVRに興味ある方を募集しています