はじめに

前回、モバイルで使える新機能や変更点をご紹介しました。
今回も簡単なデモを作成しながら、現状 OpenXR: Meta にのみ対応している新機能をご紹介していきます。

※ 本記事は、Quest本体のルーム設定が完了している前提で書いてあります。

今回作るデモ

今回は以下のようなデモを作ってみます。

  • 平面にRayを当てると、当たった場所に永続アンカーを作成する
  • Bounding box の上面にRayを当てると、当たった場所にオブジェクトを生成する
  • Bounding box の側面にRayを当てると、 Bounding box に重なるように木箱を表示する

開発環境

  • Unity 6000.0.23f1
  • AR Foundation 6.1.0-pre.2
  • Meta Quest 3

Bounding boxes

AR Foundation 6 からルーム設定で配置した Bounding box を AR Foundation で取得できるようになりました。

Bounding box の上面と側面の判定

今回のデモでは、Rayが当たった面が Bounding box の上面か側面かを判定する必要があります。
ですが、 Bounding box に面を判定する機能はなさそうなため、以下のような面の向きを判定する処理を実装しました。

private bool isSurfaceFacingUp(RaycastHit hit)
{
    // 法線ベクトルを取得
    var normal = hit.normal;

    // 上向きかどうかを判定
    return Vector3.Dot(normal, Vector3.up) >  0.9f;
}

実機で動かしてみました。

SimulatedBoundingBox

AR Foundation 6.1.0-pre.2 から XR Simulation に Bounding box が追加されました。

※ XR Environment の編集方法は前回の記事をご覧ください。

以下のようにして設定できます。

1 XR Environment に空オブジェクトを作成し、 SimulatedBoundingBox コンポーネントをアタッチします

2 Simulated Bounding Box のパラメータを調整して、テーブルなどのオブジェクトに重なるように配置します

3 エディタで実行すると、テーブルに重なるように Bounding box が表示されました

Persistent anchors

AR Foundation6 から永続アンカー機能が追加されました。

永続アンカーと聞いて「VPSのような機能」かと思ったのですが、どうもルーム内の任意の位置に配置したアンカーを永続的に保存しておく機能のようです。

調査の結果、以下のことがわかりました。

  • 保存したアンカーに対応したIDが返される
  • アンカーのIDは別途開発者側で管理する必要あり
  • 保存済みのID 一覧を取得する API は存在するものの、現時点ではどのプラットフォームでもサポートしていない
    • Quest3で実行すると NotImplementedException のエラーが発生する
  • アンカーの情報はアプリごとに管理されており、他のアプリからはアクセス不可

AR Plane の判定

今回のデモではRayが当たった AR Plane が床の場合は花、壁の場合はキノコのアンカーを配置するようにしました。
AR Plane の種類は ARPlane.classifications で判定することができます。

今回の場合は、次のようにしました。

  • 床 : Floor または Other
  • 壁 : WallFace

アンカーを配置後、アプリを再起動してもアンカーが保持されています。

床を判定する際に Other を含めた理由は、プレイエリア内の床が Floor ではなく Other に分類されているケースがあるためです。

おわりに

いかがだったでしょうか?
現状Questでは未対応な機能や、逆にQuestのみ対応している機能などが多いですが、これから対応範囲が広がっていけば、モバイルとQuestのマルチプラットフォーム開発がやりやすくなりそうです。

前回の記事では、他の AR Foundation 6 の新機能も紹介しています。
まだご覧になっていない方はぜひチェックしてみてください。



ギャップロを運営しているアップフロンティア株式会社では、一緒に働いてくれる仲間を随時、募集しています。 興味がある!一緒に働いてみたい!という方は下記よりご応募お待ちしております。
採用情報をみる