はじめに
前回、モバイルで使える新機能や変更点をご紹介しました。
今回も簡単なデモを作成しながら、現状 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のエラーが発生する
- Quest3で実行すると
- アンカーの情報はアプリごとに管理されており、他のアプリからはアクセス不可
AR Plane の判定
今回のデモではRayが当たった AR Plane が床の場合は花、壁の場合はキノコのアンカーを配置するようにしました。AR Plane の種類は ARPlane.classifications で判定することができます。
今回の場合は、次のようにしました。
- 床 :
FloorまたはOther - 壁 :
WallFace
アンカーを配置後、アプリを再起動してもアンカーが保持されています。
床を判定する際に Other を含めた理由は、プレイエリア内の床が Floor ではなく Other に分類されているケースがあるためです。
おわりに
いかがだったでしょうか?
現状Questでは未対応な機能や、逆にQuestのみ対応している機能などが多いですが、これから対応範囲が広がっていけば、モバイルとQuestのマルチプラットフォーム開発がやりやすくなりそうです。
前回の記事では、他の AR Foundation 6 の新機能も紹介しています。
まだご覧になっていない方はぜひチェックしてみてください。
