SnowballToss:メッシングとオクルージョン

ARDKのメッシング機能を使って現実世界の環境のメッシュをリアルタイムに生成する方法を実演します。シーンはその後、ARDKメッシュを利用した仮想オブジェクトの配置、衝突の検知、オクルージョン機能を紹介します。

概要

説明の後でアプリがデバイスのカメラを起動し、プレイヤーは周囲をスキャンするよう促されます。これによってアプリは周囲の環境の3Dメッシュを作成できるようになります。デバイスにLiDARが搭載されていると、できあがるメッシュの品質が上がります。スキャンを視覚化するために環境ジオメトリの特徴点も表示されます。

充分なメッシュが見つかると、環境内の開けたエリアに雪に覆われた氷のリングが出現し、環境ジオメトリに影を落とします。画面最下部付近に雪玉のついたボタンが表示され、これを押すと雪玉が前方に投げられます。この雪玉は雪のリングおよび/または環境ジオメトリに衝突し/跳ね返り/破裂し、溶けていく雪の粒子またはその場に残る雪玉の残骸を残します。

メッシュのスキャンはゲーム中も継続し、既存の雪のリングとぶつかる新たなメッシュが見つかるとそのリングはなくなります。

画面上部に45秒のゲームタイマーとプレイヤーの累積スコアが表示されます。スコアは投げた雪玉がリングをくぐるたびに100点加算されます。

使用中のARDK機能

  • ARSceneManager

  • ARMeshManager - AR環境メッシュの検知を管理します。これには検知されたメッシュと合致するMeshCollliderChunkジオメトリオブジェクトのインスタンス化と破壊も含まれます

  • MeshColliderChunks - 他の仮想アセットにオクルージョンを適用しますが、透明なカスタム素材を使用します

    • 注意:他のシーンでは ARDepthManager を用いてオクルージョンが適用されます

追加のヘルパー

  • ARFeaturePointHelper - メッシュのスキャンプロセスを視覚化

  • ARMeshFloorFallback - フォールバックメッシュ フロアプレーン

  • SnowballTossDebugManager - シーンのデバッグ機能を管理

ステート

StateInstructions

インストラクションを表示するUI

StateWarning

ARの使用に関する警告を表示するUIです。アプリの実行につき1回だけ、ユーザーが初めてARSessionに入る前に表示されます。

StateScanning

デバイスのカメラが起動し、プレイヤーは周囲をスキャンするよう促されます。これによってアプリは周囲の環境の3Dメッシュを作成できるようになります。デバイスにLiDARが搭載されていると、できあがるメッシュの品質が上がります。スキャンを視覚化するために環境ジオメトリの特徴点も表示されます。

StateCountdown

投げるゲームの開始前にアニメーション付きの3秒間のカウントダウンが表示されます。

StateTossing

雪玉を投げて雪のリングに入れる45秒間のゲーム。雪のリングは同時に3つまで出現し、リングは15秒後には自動的に効力を失います。Snowringクラスでは SearchVectorForValidRingPlacement メソッドが環境をセクターに分割し、プレイヤーの周囲の何もない空間に雪のリングを分配しようとします。この時、プレイヤーに近い正面側の空間が優先され、 Physics.OverlapSphereNonAlloc を使用して何もないエリアのテストが行われます。性能を維持するため、時間が経つと環境サーチが実行されます。

StateGameOver

UIがプレイヤーの最終スコアとリスタートの選択肢、またはマップへ戻る選択肢を表示します。

エディター専用のモックサポート

ARDKアプリケーションをエディターで開発する際、デバイスへのビルドが常に求められることを避けるため、Unityエディター内で機能するARアセットのモックバージョンを使用すると便利です。各シーンのモックオブジェクトはシーンのMockScene GameObjectにアタッチされます。このオブジェクトにはMockSceneConfigurationコンポーネントがあり、Unityエディター外ではこれによってそのオブジェクトは破壊されます。

このシーンのMockSceneオブジェクトに含まれるもの:

  • モック環境メッシュ