Unity の Geospatial Creator でプログラムでアンカーを作成、編集する

このガイドでは、Geospatial Creator を使用して C# スクリプトを作成する方法について説明します。 一般的なタスク(ファイルの作成や移動、 Unity の編集モードの ARGeospatialCreatorAnchor オブジェクト。これは スプレッドシートや KML などの事前定義リストから複数のアンカーを作成する 表示されます。

Unity の Geospatial Creator を使用すると、地理空間コンテンツを Unity Editorクイックスタート ガイド では、Geospatial Creator を紹介し、最初のイメージまたは Unity を使用した、最小限のプログラミングで地理空間に対応した AR エクスペリエンス エディタ UI。より高度なプロジェクトの場合は、Terraform を作成し、操作することも Unity ではなくプログラムで地理空間作成者 GameObject エディタ UI。

このガイドは、Geospatial Creator の基本コンセプトを理解していることを前提としています。 クイックスタートで紹介されて、地理空間情報の追加を開始する クリエイターがシーンに固定している。Geospatial Creator を有効にして、 初期 AR セッション オブジェクト、API キー、 できます。ゼロから作成する場合は、クイックスタート ガイドに沿って操作してください。 「地理空間情報の有効化」の クリエイター」 してから続行してください。

スタートガイド

この例では、市庁舎周辺に既知の場所が 1 つあるとします。 AR コンテンツを配置する場所、米国カリフォルニア州サンフランシスコ。手順 各場所にアンカー オブジェクトを作成してから、基本的な ジオメトリを追加します。

アンカーを作成する前に、アンカーと ARGeospatialCreatorOrigin: データを変換する際の基準点 Unity ワールド座標との間の緯度、経度、高度。 オリジンには、CesiumGeoreference サブコンポーネントと Cesium3DTileset 子オブジェクト。これにより、Cesium が周囲の画像をレンダリングできるようになります。 Unity エディタの [Scene] エリア内に表示されます。そのためには Google マップが必要です Tiles API キー( クイックスタート

Origin を作成する

Geospatial Creator の API には、 ARGeospatialCreatorOrigin をシーンに適用し、必要な Cesium コンポーネントを追加します。 次のコードは、 指定された Map Tiles API キーを使用:

ARGeospatialCreatorOrigin origin =
  GeospatialCreatorCesiumAdapter.CreateOriginWithCesiumGeoreference(
    37.77954, -122.417581, 0.0, "<MAP_TILES_KEY>");

デフォルトでは、このオブジェクトは Unity ワールド座標の (0, 0, 0) に配置されます。 この例ではうまくいきます

ARAnchorManager リファレンスを取得する

ARAnchorManager ランタイム時に地理空間アンカーを解決する必要があるため、 また、シーン内の ARAnchorManager への参照も必要です。最初は ARCore 拡張機能である Anchor がバンドルされた地理空間サンプル アプリケーション [AR Session Origin] にマネージャーが添付されていますGameObject.仮に アンカー マネージャーを 1 つだけ使用する場合は、 これを次のように使用します。

ARAnchorManager anchorManager =
    Resources.FindObjectsOfTypeAll<ARAnchorManager>()[0];

オリジンとアンカー マネージャーが用意できたので、次は ARGeospatialCreatorAnchor オブジェクト。

地形アンカーを作成する

次の double 値の 2 次元配列について考えてみましょう。 東向きの 3 点の正確な緯度と経度を 米カリフォルニア州サンフランシスコの市庁舎:

double[,] _cityHallEastPoints = {
    { 37.77936, -122.418617 }, // in front of city hall
    { 37.77965, -122.418680 }, // right of city hall
    { 37.77917, -122.418577 }}; // left of city hall

それぞれの位置に、地面に 1 m の立方体を 1 つずつ配置するとします。 必要があります。次のコードにより、 ARGeospatialCreatorAnchor オブジェクトを作成し、そのプロパティを 次のように指定します。

for (int i = 0; i < _cityHallEastPoints.GetLength(0); i++)
{
  ARGeospatialCreatorAnchor anchor =
    new GameObject("City Hall " + i).AddComponent<ARGeospatialCreatorAnchor>();
  anchor.Origin = origin;
  anchor.AnchorManager = anchorManager;
  anchor.Latitude = _cityHallEastPoints[i, 0];
  anchor.Longitude = _cityHallEastPoints[i, 1];
  anchor.AltitudeType = AnchorAltitudeType.Terrain;

  GameObject cube = GameObject.CreatePrimitive(PrimitiveType.Cube);
  cube.transform.parent = anchor.transform;
}

これにより、各地点に地形アンカーが作成されます。Geospatial Creator は、 適切な Unity ワールド座標にアンカーが配置されます。この座標は、 ARGeospatialCreatorOrigin オブジェクトからの相対位置。調整 地形アンカーの高度(Altitude プロパティを海抜 m)または 必要があります

実行時に、実行中のアプリの地面レベルで地形アンカーが解決されます。 Altitude プロパティによるオフセット。ただしエディタのシーンビューでは 3D タイルを基準としてではなく、デフォルトで WGS84 の高度 0 でレンダリング ジオメトリ。これは望む場所ではないことが多いため、 エディタのシーンビューでアンカーのデフォルトの高度( UseEditorAltitudeOverride プロパティを true に設定し、標高を EditorAltitudeOverride プロパティを使用した WGS 84 メートル:

anchor.UseEditorAltitudeOverride = true;
anchor.EditorAltitudeOverride = -13.5; // WGS84 altitude at ground level for City Hall plaza

これら 2 つのプロパティは、エディタモード以外では効果がなく、 実行中のアプリにコンパイルされます。

シティホール プラザの地理空間アンカー

屋上アンカーを作成する

次のアンカーとして、City の屋上にアンカーを配置するとします。 ホール。アンカーもまったく同じように作成できますが、AltitudeType プロパティを AnchorAltitudeType.Rooftop に設定します。

ARGeospatialCreatorAnchor cityHallRoofAnchor =
  new GameObject("City Hall Roof").AddComponent<ARGeospatialCreatorAnchor>();
cityHallRoofAnchor.Origin = origin;
cityHallRoofAnchor.AnchorManager = anchorManager;
cityHallRoofAnchor.Latitude = 37.77959;
cityHallRoofAnchor.Longitude = -122.419006;
cityHallRoofAnchor.AltitudeType = AnchorAltitudeType.Rooftop;

GameObject roofCube = GameObject.CreatePrimitive(PrimitiveType.Cube);
roofCube.transform.parent = cityHallRoofAnchor.transform;

地形アンカーと同様に、屋上の高度を微調整できます。 UseEditorAltitudeOverride を使用してエディタのシーンビューに固定し、 EditorAltitudeOverride プロパティ。この例では、海面の WGS84 高度は 約 10.7 m です。

屋根の地理空間アンカー

特定の高度にアンカーを作成する

最後のアンカーは、市庁舎のドームの最上部に配置します。対象 このアンカーでは正確な高度が重要になるため、 地形や屋上アンカーの代わりに WGS84 アンカーを使用する場合:

ARGeospatialCreatorAnchor cityHallDomeAnchor =
  new GameObject("City Hall Dome").AddComponent<ARGeospatialCreatorAnchor>();
cityHallDomeAnchor.Origin = origin;
cityHallDomeAnchor.AnchorManager = anchorManager;
cityHallDomeAnchor.Latitude = 37.77928;
cityHallDomeAnchor.Longitude = -122.419241;
cityHallDomeAnchor.AltitudeType = AnchorAltitudeType.WGS84;
cityHallDomeAnchor.Altitude = 73;

GameObject domeCube = GameObject.CreatePrimitive(PrimitiveType.Cube);
domeCube.transform.parent = cityHallDomeAnchor.transform;

高度は現在の高度設定であるため、エディタ専用の高度オーバーライドを使用する必要はありません。 これは WGS84 に従ってすでに指定されているものです。もちろん、Map Tiles の高さが エディタのジオメトリが実世界と比較して正しくないことが判明しました。 エディタのオーバーライドを使用してシーン内のアンカーの位置を変更することもできます。 表示されます。

ドームの地理空間アンカー