AR Anchor Manager コンポーネント
Anchor Manager は、トラッカブルマネージャー の一種です。
AR Anchor Manager コンポーネント
Anchor Manager は、各アンカーにゲームオブジェクトを作成します。アンカーとは、デバイスに追跡させたい、スペース上の特定の点のことです。デバイスは通常、その生存期間を通じてアンカーの位置と向きを更新するための追加作業を行います。アンカーは一般に大量のリソースを消費するオブジェクトであるため、使用は控えめにする必要があります。
Anchor Prefab
ARAnchorManager には、"Anchor Prefab" フィールドがありますが、これはコンテンツのためのフィールドではありません。アンカーを含む ARWorldMap をロードするなど、AddComponent
以外の方法でアンカーを作成した場合、AR Foundation はこれを表す新しい ゲームオブジェクト を作成します。
"Anchor Prefab" が null
の場合、AR Foundation は ARAnchor
コンポーネントを備えたゲームオブジェクトを作成します。ただし、アンカーに他のコンポーネントも追加する場合は、AR Foundation がアンカー用にインスタンス化するためのプレハブを提供できます。つまり、Prefab フィールドを使用するとアンカーのデフォルトの動作が拡張されますが、コンテンツをワールドに配置するための方法としてはお勧めしません。
アンカーの追加と削除
新しいアンカーを追加するには、AddComponent<ARAnchor> を使って、任意のゲームオブジェクトに ARAnchor コンポーネントを追加します。また、アンカーは、保存したアンカーが含まれている ARWorldMap をロードするなどして、間接的に作成することもできます。
アンカーの Transform を変更しないでください。アンカーの transform は、ARFoundation によって自動的に更新されるからです。
アンカーを追加すると、追加されたことが Anchor Manager の anchorsChanged イベントによってレポートされるまで、1-2 フレームを要することがあります。追加してから追加したことがレポートされるまでの間、アンカーは "保留" 状態にあります。これは、ARAnchor.pending プロパティを使用して照会できます。
アンカーを削除するには、AR Anchor コンポーネント (またはそのゲームオブジェクト) に対して Destroy を実行します。
Note
ARAnchor に対して Destroy
を実行すると、その anchorsChanged
イベントを受信しなくなります。
アンカーのロード
一部のプラットフォームでは、以前に保存したアンカーが含まれている AR (拡張現実) データをロードすると、自動的にアンカーを作成できます。この場合、ユーザーの直接的な制御下にない外部イベントに応じて、アンカーが作成されたり、削除されたりする可能性があります。
コンテンツの固定
アンカーの一般的なユースケースとしては、現実世界への仮想コンテンツの配置があります。
例:
既存のコンテンツをアンカーにするには、以下の手順に従います。
void AnchorContent(Vector3 position, GameObject content)
{
// Add an anchor to your content
content.AddComponent<ARAnchor>();
}
プレハブをアンカーとしてインスタンス化するには、以下の手順に従います。
void AnchorContent(Vector3 position, GameObject prefab)
{
// Create an instance of the prefab
var instance = Instantiate(prefab, position, Quaternion.identity);
// Add an ARAnchor component if it doesn't have one already.
if (instance.GetComponent<ARAnchor>() == null)
{
instance.AddComponent<ARAnchor>();
}
}
アンカーのアタッチ
また、平面にアタッチするアンカーを作成することも可能です。これには AttachAnchor メソッド を使用します。
public ARAnchor AttachAnchor(ARPlane plane, Pose pose);
アンカーを平面にアタッチすると、アンカーの更新セマンティクスが影響を受けます。このタイプのアンカーは、アタッチされている平面の法線に沿ってのみ位置を変えるため、平面からの距離が一定に維持されます。
平面にアンカーをアタッチする一般的なユースケースとしては、平面上への仮想コンテンツの配置があります。Unity では、AttachAnchor
を使用してアンカーを作成し、コンテンツをアンカーの親にすることをお勧めします。
* Apple および ARKit は、アメリカ合衆国およびその他の国や地域で登録されている Apple Inc. の商標です。