Unity MARS の操作
Unity MARS アプリケーションを作成する際に使用できる方法として、Rule (ルール) のワークフローとゲームオブジェクトワークフローの 2 つがあります。それぞれの方法には独自の強みがあります。
Rule のワークフローでは、AR (拡張現実) のレイアウトや動作を平易な言葉で簡潔に記述します。この方法では、予想される現実世界の環境と、その環境に配置される AR コンテンツを説明します。例えば、"すべての水平面に草を作成する" や "画像マーカーに UI を表示する" という内容です。Rule のワークフローは、AR コンテンツの設定手順を案内するように設計されており、このワークフローには、Proxy (プロキシ)、Replicator (レプリケーター)、Proxy Group (プロキシグループ) などの設定が含まれます。Unity MARS での Rule の使用の詳細については、Rule に関するドキュメント を参照してください。
一方、ゲームオブジェクトワークフローでは、プロキシのゲームオブジェクトを作成して管理し、その適切な拡張コンテンツを作成します。さらに、アプリケーションの要件に応じて、前述のプロキシをレプリケーターの親にするなどの作業を行います。この方法は、Rule のワークフローよりも手作業が多くなりますが、アプリケーションに必要なプロキシ設定が一般的でない場合は柔軟性が高くなります。
このセクションでは、ゲームオブジェクトワークフローでコンテンツを作成する方法に重点を置いて説明します。
このページでは、まず、Unity MARS で AR コンテンツをオーサリングする場合のヒントを紹介した後、プロキシ、プロキシグループ、レプリケーター の操作の基本を説明します。その後、AR でスケールを使用する方法や Unity MARS でシーンが評価されるタイミングを制御する方法について説明します。
このページでは、Unity MARS のワークフローについて以下のように説明します。
- Unity MARS で AR コンテンツをオーサリングする場合のヒント
- プロキシの作成
- プロキシグループの作成
- レプリケーターを使用した複数のサーフェスへのコンテンツの配置
- ワールドスケールを使用した AR コンテンツの拡大縮小
- シーンの評価
Unity MARS で AR コンテンツをオーサリングする場合のヒント
Simulation View に表示される軸に一致するサーフェスを考えることをお勧めしますが、現実世界では、厳密な向きを期待することはできません。例えば、長方形のテーブルをスキャンした場合に、そのテーブルの縁が X 軸と Z 軸に沿ったサーフェイスになることはほとんどありません。通常、AR デバイスから受け取った平面は、特にサーフェスが矩形でない場合、回転数がかなりランダムになります。
通常は、コンテンツを使用できる状況を制限するのではなく、世界に適合できるコンテンツを作成することをお勧めします。コンテンツを適合できるようにすることは、そのコンテンツが確実に機能するために最良な方法です。
AR は予測不能です。アプリケーションの重要な機能について不測の事態やフォールバックを用意しておいてください。
通常、少なくともコンテンツの配置が完了するまでは、部屋のスキャンとデバッグのビジュアライゼーションをオンにしておくことをお勧めします。ビジュアライザーや、空間を移動するための画面上の指示は、アプリケーションがまだ動作していて、空間をさらに表示する必要があることをユーザーが理解するのに役立ちます。
合成データを使用すると、レイヤーに AR 体験を構築できます。例えば、ほとんどの場合は、重要なコンテンツを直接環境に配置するよりも、環境に合成の "スポーンポイント" を作成することをお勧めします。このように、ユーザーに最も近いスポーンポイントを探すなどの条件を作成できます。詳細については、合成データを使用してコンテンツを配置する を参照してください。
プロキシの作成
プロキシを作成するには、Unity のメインメニューから GameObject > MARS > Proxy に移動します。これで、シーンに空のプロキシが作成されます。
新しい (空の) プロキシには、デフォルトの Action (アクション) と Condition (条件) がいくつか含まれています。プロキシは、一致するデータに位置と方向が設定されていることを想定し、一致を検出したかどうかに基づいてその子ゲームオブジェクトを表示または非表示にします。プロキシがどの種類の Plane (平面) とも一致するようにするには、プロキシに新しい条件を追加します。Inspector で Add MARS Component ボタンをクリックした後、Condition > Trait > Plane の順に選択します。
これで、プロキシは、世界で検出された 1 つのサーフェスと照合します。
コンテンツをプロキシにアタッチする
Hierarchy ビューでは、作成したプロキシの子ゲームオブジェクトとして、プレハブ、メッシュ、アセットをドラッグアンドドロップできます。可視化されたプロキシ上にゲームオブジェクトをドラッグすると、そのプロキシが強調表示され、その名前を含むツールチップが表示されます。ゲームオブジェクトをドロップすると、Unity MARS により、そのアセットがプロキシの子として Hierarchy ビューに追加されます。
ノート: MARS は、アセットのローカル位置オフセットを保持します。検出されたサーフェイスの中心にアセットを表示する場合は、そのローカルの位置を (0, 0, 0) に設定してください。
コンテンツの位置をプロキシに合わせる
プロキシが一致を検出すると、Set Pose Action では、そのトランスフォームの位置と回転がデータのポーズに合わせて移動されます。
一致データが垂直面の場合は、Align with World Up オプションを使用すると、コンテンツを一貫して垂直方向で配置できるため役立つ場合があります。このオプションには、3 種類のモードがあります。
- None: (デフォルト) プロキシはデータのポーズと直接照合します。ポーズデータの回転は、データプロバイダーによって異なります。
- Y: プロキシのローカル Y 軸 (上方向) は常にワールドの上方向に揃えられます。
- Z: プロキシのローカル Z 軸 (前方) は常にワールドの上方向に揃えられます。
Y 軸と Z 軸のいずれかを上方向に揃えるようにモードを設定した場合、もう一方の軸は常にワールドの上方向に対して垂直になり、データの上方向に向かって揃えられます。データの上方向がワールドの上方向と平行になっている場合は、データの前方にフォールバックします。
シミュレーションデータから自動的にプロキシを作成する (Create Tool)
Create Tool を使用すると、Simulation View の任意のデータにプレハブをドラッグアンドドロップして、サンプリングされたデータを記述する条件を含むプロキシを自動的に作成できます。
詳細については、Create Tool に関するドキュメント を参照してください。
シミュレーションデータに対してプロキシをデバッグする (Compare Tool)
Compare Tool を使用すると、Simulation View で、プロキシが特定のデータ (サーフェス、画像マーカーなど) と一致する理由または一致しない理由をデバッグできます。
詳細については、Compare Tool に関するドキュメント を参照してください。
合成データを使用してコンテンツを配置する
条件に一致した プロキシにゲームオブジェクトをアタッチする 方法は説明しました。プロキシどうしの比較など、合成データを使用すると柔軟性がさらに高くなります。Unity MARS では、クエリに基づいて合成データが作成され、データベースに再度格納されます。合成データのセマンティックタグに対してクエリを実行し、さらに条件を追加することができます。
例えば、AR ゲームを制作する場合、敵を配置するためのいくつかの基本的な条件をレプリケーターを使用して定義できますが、その敵を弱くしたバージョンを、プレイヤーキャラクターのスポーンポイントの近くにスポーンさせる場合もあります。player_spawn および enemy_spawn というセマンティックタグを、ヒーローのレプリケーターと敵のレプリケーターの合成データに追加する場合は、弱くした敵をスポーンするかどうかを決定するレプリケーターに距離の条件も追加することができます。
プロキシグループの作成
前のセクションでは、1 つのプロキシ (つまり、現実世界のトレイトで構成されている 1 つのコレクション) の操作方法について説明しました。Unity MARS には、プロキシグループという機能も用意されており、これを使用すると、複数のプロキシをまとめることができます。
プロキシグループは、個々のプロキシと同じパターンに従います。プロキシグループには、それをアドレス指定また位置指定するための Relation (関係) と、プロキシグループの一致時または更新時にスクリプトを呼び出すためのアクションが含まれています。違いは、関係のスクリプトが 1 つのプロキシではなく、複数のプロキシを参照する点です。
プロキシグループの構造は以下のとおりです。
ゲームオブジェクト (プロキシグループ) (関係)
- 子ゲームオブジェクト (プロキシ) (条件)
- 子ゲームオブジェクト (プロキシ) (条件)
-...
このプロキシグループで利用できる子ゲームオブジェクトのリストは、グループの Inspector に表示されます。Unity MARS に子ゲームオブジェクトが必要であることを示すには、Required Children リストで子ゲームオブジェクトの横にあるチェックボックスをオンにします。MARS では、プロキシグループの検出に必要のない子ゲームオブジェクトを使用します。そうすると、このような子ゲームオブジェクトが失われたり削除されたりしても、プロキシグループがデータを失うことはありません。
プロキシグループの作成方法は 3 つあります。
- MARS Panel で Proxy Group ボタンをクリックします。
- Unity のメインメニューから GameObject > MARS > Proxy Group に移動します。
- 新しいゲームオブジェクトに ProxyGroup コンポーネントを追加します。
上記のすべての方法では、1 つのプロキシグループと 2 つの子ゲームオブジェクトを含むゲームオブジェクトが作成されます。関係を追加するには、プロキシグループの Inspector で Add MARS Component ボタンをクリックして、Relation を選択し、メニューから関係の種類を選択します。
プロキシグループは、レプリケーター内にも配置できます。これにより、そのプロキシグループのインスタンスが一致の数だけ作成されます。
レプリケーターを使用して複数のサーフェスへコンテンツを配置する
各プロキシは、現実世界のデータとの一致を 1 つだけ表します。ただし、クエリが一致するたびにコンテンツをスポーンすることもできます。例えば、アプリケーションで検出されたすべての水平面に草地をスポーンすることが必要な場合があります。この場合は、レプリケーターを使用できます。
レプリケーターを使用するには、以下の手順に従います。
上記の プロキシの作成 セクションで説明した方法に従って、プロキシを作成します。
Replicator ゲームオブジェクトを作成します。それには、MARS Panel で Replicator ボタンをクリックするか、Unity のメインメニューから GameObject > MARS > Replicator に移動します。
作成したゲームオブジェクトを選択します。その Inspector ウィンドウで、アプリケーションでサポートする一致のインスタンス数を Max Instances プロパティに設定したり、Spawn As Child プロパティを有効または無効にしてレプリケーターの子として作成するか兄弟として作成するかを設定したりできます。Max Instances の値が 0 の場合は、インスタンスの数に制限はありません。
プロキシを、レプリケーターの子になるように移動します。
ワールドスケールを使用して AR コンテンツをスケールする
浮動小数点精度により、Unity エディターは、現実世界のオブジェクトのスケール (1 単位は 1 メートル) で最適に動作します。コンテンツを縮小して "ミニチュアの世界" の動作を実現する場合に、重力、ライティング、物理演算、AI などの効果が動作しなくなることはありません。これらのシステムは引き続き標準スケールで動作します。
Unity MARS では、World Scale (ワールドスケール) と呼ばれる概念が使用されています。これにより、現実世界のスケールでコンテンツを作成し、それを縮小したスケールで表示することができます。現在のシーンのワールドスケールは、Inspector の MARS Session で調整できます。通常、MARS では、実物大の AR に 1:1、平面で使用するミニチュアには 1:10 というスケールが使用されます。
ノート: Unity MARS は、現在、ミニチュアのスケールが設定されたゲームオブジェクトと現実世界のスケールが設定されたゲームオブジェクトの組み合わせをサポートしていません。
ワールドスケール効果を実現するには、ゲームオブジェクトのサイズを "実物大" のままにし、代わりにカメラのオフセットを変更して、物理システム (物理演算、パーティクル、ライティングなど) が引き続き期待どおりに動作するようにします。詳細については、Unity ブログの AR でのスケールの扱いに関する記事 と Unity の GDC での AR ライティングの説明 を参照してください。
シーンの評価
最後に、重要な点として、Unity MARS でプロキシの一致がどのように評価されるかについて説明します。MARS がシーンの一致を評価する方法を制御するには、2 つの方法があります。アプリケーションのニーズに応じて、どちらかを選択する必要があります。MARS をどちらのモードで起動するかを選択するには、Edit > Project Settings > MARS > Runtime に移動し、Startup Mode オプションを設定します。
- Evaluate On Interval: デフォルトでは、MARS は一定の間隔でシーンを解決しようとします。この間隔は、Evaluation Interval フィールドで指定できます。
- Wait For Request: このモードの場合、MARS は、リクエストを受け取るまで、シーンの一致を評価しません。
Minimum Evaluation Time フィールドでは、評価終了後から次に評価できるようになるまでの最小時間を制御します。このフィールドを使用すると、フレームごとにシーンの評価を実行するような評価リクエストをアプリケーションが大量かつ無差別に送信することを防ぐことができます。このフィールドを 0 に設定すると、評価と評価の間の時間は適用されません。