Unity MARS の概念
Unity MARS では、固有の概念をいくつか使用します。このページでは、この拡張機能全体で使用されるさまざまな用語について説明します。
Proxy
Proxy (プロキシ) は、テーブル、顔、猫など、アプリケーションが検出して使用できる現実世界のオブジェクトの代替として機能する、シーン内の GameObject です。AR アプリケーションの作成は、デジタルコンテンツと現実世界のオブジェクトや場所との関連付けに大きく依存しています。プロキシは、現実世界とアプリケーション内のデジタルコンテンツを結び付けるプレースホルダーのようなものと考えてください。
抽象プロキシには、時間ベースや天候ベースの条件などの条件照合データを設定できます。現時点では、このプロキシは Unity MARS には存在しませんが、将来的に提供される可能性があります。
プロキシには、拡張コンテンツを現実世界にどのように一致させるかを定義、制限、制御する Condition (条件)、Action (アクション)、Force (力) などの Unity MARS コンポーネントを設定することができます。
Condition (条件): Unity MARS の Condition は、プロキシ ゲームオブジェクトにアタッチされ、プロキシが一致するために必要となる制限を定義するコンポーネントです。条件の例として水平面があります。プロキシ に水平面の条件がアタッチされている場合、検出された水平面のみがこのプロキシに一致することになります。
Action (アクション): Unity MARS の Action は、プロキシ にアタッチできるコンポーネントで、条件が設定されたプロキシが一致するものを取得したとき、または条件の MARS データが変更されたときに実行される動作を定義します。例えば、Body Expression アクションは、トラッキング対象の人物が定義済みのボディポーズと同じポーズをとったときに、関数のコールバックを生成します。
Force (力): Unity MARS の Force は、プロキシ を引いたり押したり保持したりして、最終的な位置に配置する柔軟なバネのような力の関係を表現できる特殊なタイプのコンポーネントです。1 つのオブジェクトからの Force を組み合わせて他の複数のオブジェクトの配置に影響を与えることができ、その逆も可能です。
力を使用すると、オブジェクト間のスペースを計算する、オブジェクトを引き寄せてユーザーの視界に入れる、1 つのスペースに複数の拡張オブジェクトを収めて配置するなど、一般的な配置シナリオをモデル化できます。さまざまなタイプの力の詳細については、Force に関するセクション を参照してください。
Proxy Group
Proxy Group (プロキシグループ) は、アプリケーションが動作するためにすべて存在する必要のある、現実世界の複数のオブジェクトをグループ化したものです。例えば、"2 つのテーブル、1 つの床、少なくとも 1 つの壁がある部屋" がプロキシグループです。これらのオブジェクトのいずれかが存在しない場合、プロキシグループ全体が一致しません。
プロキシグループに複数の関係を追加して、照合をさらに厳密にすることができます。例えば、2 つのプロキシがどちらも平面を必要としているとします。この場合、1 つ目の平面が 2 つ目の平面より 1 メートル以上高い位置になければならないことを指定する Elevation Relation (高低差関係) を含めたプロキシグループを追加できます。アプリケーションがこれらのオブジェクトとそれらの間の関係の 両方を 検出するまで、どちらのプロキシも条件には一致しません。
Replicator
アプリケーションが検出した特定のプロキシまたはプロキシグループに、プレハブの 1 つのインスタンスを関連付けたい場合は、アプリケーションにそのように指示できます。一方、プレハブの複数のインスタンスを現実世界で一致する複数のオブジェクトに関連付けたい場合は、Replicator (レプリケーター) を使用します。
例えば、平面条件を指定したプロキシを設定し、そのプロキシが一致したときにアプリケーションの環境の一部がその上に表示されるようにすることができます。このプロキシをレプリケーターで指定すると、その条件に一致する現実世界の他のオブジェクトすべてにそのプロキシが複製されます。この場合、アプリケーションの環境は周囲の各サーフェスに表示されます。
もっとコード寄りの定義をするなら、レプリケーターは、MARS データベース内で一致するデータを検出したときに、ユーザーが定義した上限に達するまで、プロキシまたはプロキシグループを継続的に複製するコンポーネントです。言い換えれば、レプリケーターは実質的にはプロキシとプロキシグループを "Every 向け*" Rule (ルール) に変えるものです。
Rule
Rule のワークフロー は、新しいオブジェクトタイプを導入するための MARS UI 機能ではありません。このページには、既存のオブジェクトタイプの多くが表示され、統合ビューを通じてユーザーに新しい機能や高度な機能をガイドすることを目的としています。Rule UI には、レプリケーター、プロキシ、プロキシグループ、ランドマーク、Force が組み込まれています。
Proxy Force
Proxy Force (プロキシの力)を使用すると、プロキシの最終的な配置を調整し、その配置をリアルタイムで操作できます。これを行うには、整列領域や空間関係などの複数の "ソフトな影響" をゲームオブジェクトに適用します。Unity MARS では、物理演算モデルを使用して、これらの力のバランスをとります。
ProxyForce コンポーネントを使用すると、ゲームオブジェクトを動かす方法 (Y 軸を中心とした回転のみ、リアルタイムの解決の有効化など) を設定できますが、通常、実際の Force は ProxyAlignmentForce、ProxyRegionOccupancy、ProxyRegionForceTowards のどれかになります。これらのコンポーネントはそれぞれ、別のゲームオブジェクトを基準としてプロキシを移動させる Force、占有/パディング領域が衝突しないようにする Force、フィルタリングされた特定の形状に向かってプロキシを引っ張る Force を適用します。
合成オブジェクトとシミュレーションビュー
開発中に Unity MARS でアプリケーションを試したいときは、シミュレーションビュー で Synthetic Objects (合成オブジェクト) に対してアプリケーションをテストすることができます。
Simulation View (シミュレーションビュー) を使用すると、合成環境、事前に作成された記録済みのストリーム、ライブデバイスからのリモートストリームなど、さまざまなデータソースに対してアプリケーションをテストできます。このビューでは、Instant (即時)と Continuous (連続) の 2 つのモードのいずれかでシーンを表示できます。
- Instant シミュレーションでは、Unity MARS によってすべてのデータとの照合がすでにテスト済みであるシミュレーション環境にすべてのプロキシを配置して、シーンを "瞬間" として実行します。
- Continuous シミュレーションでは、カメラが移動してシミュレーション環境を探索している中でデータを検出したときに、Device View (デバイスビュー) でプロキシの照合が実行されます。デバイスビューは、AR デバイスを手に持ち、それを使用して周囲の環境をスキャンしているかのように機能します。
任意のゲームオブジェクトに合成セマンティックタグを付け (詳細については 用語集 を参照)、シミュレーションビューでそのプレハブを合成環境として使用できます。また、タグ付けされた合成オブジェクトを見つけるために、一致条件としてセマンティックタグの条件を指定することもできます。
ランタイムに、アプリケーションによって検出されたプロキシにセマンティックタグを付けたり (橋の始点と終点にタグを付けるなど)、現実世界でタグが表示される場所を定義するようユーザーに求めることができます。
MARS データベース
Unity MARS は、(デバイス上またはシミュレーションで) 検出された現実世界のデータのデータベースを保持しています。プロキシを使用して、アプリケーションの設計対象である現実世界のデータやコンテキストにゲームオブジェクトを関連付けるための条件を定義できます。例えば、テーブルを表す条件が設定された Proxy コンポーネントを含むゲームオブジェクトは、MARS データベース内で一致するデータが利用可能になった場合にのみ関連付けられます。
MARS データベースの詳細については、ソフトウェア開発ガイドの MARS データベースのセクション を参照してください。
MARS Session とカメラ
MARS エンティティをシーンに追加すると、Unity MARS によって、アクティブなシーンの階層に MARS Session ゲームオブジェクトが自動的に追加されます。シミュレーションビューを使用するには、ロードされたシーンに MARS Session が存在する必要があります。
アクティブなシーンにカメラがすでにある場合、そのカメラは MARS Session オブジェクトの子になり、MARSCamera スクリプトがカメラに追加されます。アクティブなシーンにカメラがない場合は、MARSCamera スクリプトを追加したカメラが作成され、MARS Session の子ゲームオブジェクトとして追加されます。
MARS Camera スクリプトが追加されたカメラは、親のリスト内のどこかに MARS Session が常に含まれている必要があります。子ゲームオブジェクトを MARS Session ゲームオブジェクトに追加し、MARS Camera をそのゲームオブジェクトの子として追加することは可能ですが、Unity MARS では MARS Camera を MARS Session の階層外に移動することはできません。これは、Unity MARS が、MARS Session をトランスフォームおよびスケールすることで、MARS Camera の AR トラッキング空間に影響を与える機能に依存しているためです。