空間アンカー
このサンプルでは、現実世界の特定の箇所を正確に追跡するために空間アンカーを作成および破棄する方法を紹介します。
空間アンカーに関する基本的な情報や、AR FoundationのAR Anchor Managerコンポーネントの機能については、Unityのドキュメントを参照してください。
機能の有効化
-
OpenXRのプロジェクト設定を開きます。
Project Settings > XR Plug-in Management > OpenXR (Androidタブ)
-
以下のようにSpaces機能の無効 / 有効を設定します。
- Hand Tracking:無効
- Spatial Anchors:有効
ハンドトラッキング機能について
サンプルのインポート
まだサンプルをインポートしていない場合は、以下の手順でインポートすることができます。
サンプルシーンは以下の場所に存在します。
Assets/Samples/Snapdragon Spaces/1.X.X/Core Samples/Scenes/Anchor Sample/Anchor Sample.unity
サンプルの仕組み
シーン内では、アンカーに関するUIパネルがカメラから2メートル先に配置されています。
Place anchor on surfaces (平面にアンカーを配置) トグルを有効にすると、現実世界の平面に対するアンカーの位置を特定するために、毎フレーム頭部の中心から前方にレイが飛ばされます。
ヒットが 検出されると、配置されるギズモは黄色に変わります。
スマートフォンのタッチパッドをタップするか、視線インタラクタを選択した場合に表示されるUIパネルで視線を操作すると、空のゲームオブジェクトとARAnchorのゲームオブジェクトがインスタンス化されます。
空のゲームオブジェクトには透明なギズモの3Dモデルがあり、AR Sessionによってトラッキングされます。
ARアンカーのギズモは、ARAnchorManagerのanchorsChangedイベントによって更新され、トラッキング状態を表します。
public GameObject GizmoTrackedAnchor;
public GameObject GizmoUntrackedAnchor;
private override void Start() {
FindObjectOfType<ARAnchorManager>().anchorsChanged += OnAnchorsChanged;
}
private void OnAnchorsChanged(ARAnchorsChangedEventArgs args) {
foreach (var anchor in args.added) {
...
}
foreach (var anchor in args.updated) {
Destroy(anchor.transform.GetChild(0).gameObject);
var newGizmo = Instantiate(anchor.trackingState == TrackingState.None ? GizmoUntrackedAnchor : GizmoTrackedAnchor);
newGizmo.transform.SetParent(anchor.transform, false);
}
foreach (var anchor in args.removed) {
...
}
}