AR Plane Manager コンポーネント
Plane Manager は、トラッカブルマネージャー の一種です。
AR Plane Manager コンポーネント
Plane Manager は、環境内で検出された平面ごとにゲームオブジェクトを作成します。平面とは、ポーズ、次元、境界点で表される平らなサーフェスです。この場合の境界点は凸状です。
平面として検出できる環境内の特徴の例としては、水平のテーブル、フロア、カウンター、垂直の壁などがあります。
Detection Mode には水平、垂直、またはその両方を指定できます。プラットフォームによっては、垂直平面検出を実行するために追加の作業が必要な場合があるので、水平平面しか必要ない場合は、垂直平面検出を無効にしてください。
AR Plane Manager Detection Mode ドロップダウン
平面のライフサイクル
平面は追加、更新、削除できます。AR Plane Manager は 1 フレームに 1 回 planesChanged
イベントを呼び出すことができます。このイベントには、前回のフレーム以降に追加、更新、削除された平面の List
が 3 つ含まれます。
平面が最初に検出されると、Plane Manager はそれを "追加された" 平面としてレポートします。その後の平面に対する更新は、この最初の平面検出に対する微調整となります。平面は通常、環境内のスキャン対象が増えるにつれ拡大していきます。
平面が更新されるときは、多くの場合その境界頂点も変化しています。このイベントに対応するには、平面の ARPlane.boundaryChanged
イベントをサブスクライブします。このイベントは、少なくとも 1 つの境界頂点が Vertex Changed Threshold 以上変化するか、頂点の総数が変化した場合にのみ発動します。
平面が削除されるときは、通常はサーフェスが削除されるのではなく、その平面が無効化される形で環境についてのサブシステムの認識が向上または変化します。
一部のプラットフォームは、平面マージという概念に対応しています。ある平面が別の平面にマージされると、ARPlane.subsumedBy には最初の平面を組み込んだ平面が含まれることになります。これに対応していないプラットフォームでは、一方の平面が削除され、もう一方の平面がそれを含むサイズに拡大される場合もあります。
平面の可視化
平面を可視化するには、プレハブやゲームオブジェクトを作成して、ARPlane の boundaryChanged
イベントをサブスクライブするコンポーネントを含める必要があります。AR Foundation には、ARPlaneMeshVisualizer
が用意されています。このコンポーネントは、境界頂点から Mesh
を生成し、それを MeshCollider
、MeshFilter
、LineRenderer
(存在する場合) に割り当てます。
プレハブの作成に使用できる新しいゲームオブジェクトを作成するには、シーンビューで右クリックし、表示されたコンテキストメニューから GameObject > XR > AR Default Plane の順に選択します。
ゲームオブジェクトを作成したら、それを ARPlaneManager
の Plane Prefab
フィールドに割り当てます。直接使用することも、ゲームオブジェクトを Assets フォルダーにドラッグしてプレハブを作成することもできます。Default Plane は、以下のようになっています。
まず AR Default Plane
をプレハブとして保存し、AR Default Plane
ゲームオブジェクトを削除してから、それを Prefab フィールドで使用することをお勧めします。平面をシーン内に残すと、そのシーン内にゼロスケールの平面アーティファクトが残ることになるからです。
AR Foundation パッケージには、これらの使いやすいコンポーネントが含まれていますが、必要に応じて独自のビジュアライザー (またはその他のロジック) を作成することもできます。
平面の無効化
AR Plane Manager が有効になっている限り、平面の作成、更新、削除は継続されます。既存の平面のレンダリングを停止するには、以下のようにそのゲームオブジェクトを非アクティブ化します。
foreach (var plane in planeManager.trackables)
{
plane.gameObject.SetActive(false);
}
Plane Manager がまだ管理している ARPlane
に対して Destroy
を実行しないでください。