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

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

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

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

スタートガイド

この例では、米国カリフォルニア州サンフランシスコの市庁舎周辺に、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 への参照も必要です。Compute Engine で ARCore 拡張機能である Anchor がバンドルされた地理空間サンプル アプリケーション [AR Session Origin] にマネージャーが添付されていますGameObject。シーンにアンカー マネージャーが 1 つしかないと仮定すると、次のようにアンカー マネージャーへの参照を取得できます。

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

オリジンとアンカー マネージャーが作成されたので、ARGeospatialCreatorAnchor オブジェクトの作成を開始できます。

地形アンカーを作成する

米国カリフォルニア州サンフランシスコの市庁舎の東側にある 3 つのポイントの正確な緯度と経度を表す double 値の 2 次元配列の例を以下に示します。

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 プロパティを使用して WGS84 メートル単位で高度を指定します。

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

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

市庁舎広場の地理空間アンカー

屋上アンカーを作成する

次に、市庁舎の屋上にアンカーを配置するとします。アンカーは、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 に従ってすでに指定されているため、エディタ専用の高度オーバーライドを使用する必要はありません。もちろん、エディタ内の地図タイル ジオメトリの高さが現実世界と比較して正しくない場合でも、エディタのオーバーライドを使用して、シーンビュー内のアンカーを再配置できます。

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