概要
今回はFirstVRをARで用いることについて書いてみたいと思います。
VRはARとも相性がいいので(というかニアイコール)、応用できないかなと思ったのが理由です。
モバイルARだとどうしても手のジェスチャなどを取ることができず、HoloLensにあるような体験を作りづらいという難点があります。
しかも、画面タップで処理させようとすると画面を手で覆ってしまってせっかくのコンテンツが見えない、というのも問題のひとつです。
ということで、このあたりをFirstVRを使って解決してみたいと思います。
ちなみに今回のデモはこんな感じ↓
グーとパーで操作できるようにしてみた。 #FirstVR pic.twitter.com/t1mBVX07LL
— edom18@VR (@edo_m18) December 30, 2018
ARKit
今回はUnityのARKit Pluginを使って実装しています。
以前はARKit PluginがAsset Storeでダウンロードできたのですが、どうやら提供されなくなったようで、開発されているリポジトリから直にダウンロードしてくる必要があるようです。
詳細はこちらを以下をご覧ください。
ARKit Pluginの中のシーンを利用する
ARKit Pluginにはいくつものサンプルシーンが存在します。
タップした位置にオブジェクトを移動するタイプのサンプルならなんでもいいですが、今回はUnityAROcclusion
シーンを利用しました。
このシーン内に、FirstVRを利用するためのセットアップを行います。
カスタムジェスチャを登録してARを操作する
今回は、前回書いた「カスタムジェスチャ」の仕組みを使ってARのオブジェクトに干渉することをしています。
カスタムジェスチャ自体については上記記事をご覧ください。
今回は「グー」と「パー」の状態でAR内のキャラクターのポーズを変更するようにしてみました。
本当はつまむようなジェスチャにしたかったのですが、パーの状態との誤認識がそれなりにあったので、安定したグーでデモしています。
複数ジェスチャ登録することで色々な指示が出せるのでARとの相性はとても良さそうに思います。
今回の実装は以下のようにしました。
private void Update()
{
if (!_isInitialized)
{
return;
}
bool needsNext1 = _gesture1.held && !_lastHeld1;
_lastHeld1 = _gesture1.held;
if (needsNext1)
{
_idleChanger.Next();
}
bool needsNext2 = _gesture2.held && !_lastHeld2;
_lastHeld2 = _gesture2.held;
if (needsNext2)
{
_idleChanger.Back();
}
}
_gesture1.held
と_gesture2.held
がそれぞれ、登録したジェスチャ状態かを判断するbool
型の値です。
つまり、登録したジェスチャの状態になっていたら、AR内キャラのポーズを変更する、という単純なものです。
仕組み自体はシンプルですが、動画を見てもらうと分かるように、比較的安定して認識してくれるので、ARを用いたコンテンツと組み合わせるとだいぶ良さげな感じです。
oculus Goとも連携できるようなので、色々いじってみようと思います。