Unity'deki Geospatial Creator'da programatik olarak çapa oluşturma ve düzenleme

Bu kılavuzda, Geospatial Creator'ın C# komut dosyaları yazmak için nasıl kullanılacağı açıklanmaktadır. oluşturma ve taşıma gibi ortak görevleri Unity'nin Düzenleme modunda ARGeospatialCreatorAnchor nesne var. Bu özellik, e-tablo veya KML gibi önceden tanımlanmış bir listeden birden çok bağlantı oluşturma dosyası olarak kaydedebilirsiniz.

Unity'deki Coğrafi İçerik Oluşturucu, coğrafi içeriği Unity Düzenleyici'de bulabilirsiniz. Hızlı Başlangıç Kılavuzumuz Jeo-uzaysal Oluşturucu'yu tanıtıyor ve ilk coğrafi konum uygulamanızı Unity'yi kullanarak minimum programlamayla coğrafi özellikli AR deneyimi Düzenleyici kullanıcı arayüzü. Daha gelişmiş projelerde ise proje paydaşlarıyla, Unity'yi kullanmak yerine Geo-uzaysal Oluşturucu Oyun Nesneleri'ni (programatik olarak) Düzenleyici kullanıcı arayüzü.

Bu kılavuzda, temel Coğrafi Oluşturucu kavramlarına aşina olduğunuz varsayılır olduğunu ve Coğrafi Konum'u eklemeye İçerik üretici bir sahneye sabitler. Geospatial Creator'ı etkinleştirmeniz ve ve sahne. Sıfırdan başlıyorsanız Hızlı Başlangıç Kılavuzu'ndaki " İçerik Üretici" bölümünü inceleyin.

Başlarken

Bu örnekte, Yeşil Ofis’te Belediye Binası çevresinde bilinen bir dizi konumunuz olduğunu varsayalım AR içeriği yerleştirmek istediğiniz San Francisco, Kaliforniya, ABD. Bu kurstan sonra her konumda çapa nesneleri oluşturmanız ve daha sonra, geometrik özellikleri kullanır.

Bağlayıcı oluşturabilmeniz için önce ARGeospatialCreatorOrigin, dönüşüm için bir referans noktasıdır Unity dünya koordinatlarına karşılık gelen enlem, boylam ve rakımları görebilirsiniz. Kaynak ayrıca CesiumGeoreference alt bileşeni ve Sezyumun çevresini oluşturmasına olanak tanıyan Cesium3DTileset alt nesnesi Sahne görünümündeki 3. Adım'ı seçin. Bunun için bir Google Haritası'na ihtiyacınız var, Parçalar API anahtarı şurada açıklanmıştır: Hızlı başlangıç kılavuzu

Kaynak Oluşturma

Jeo-uzaysal Oluşturucu API'sı, zaman çizelgesi oluşturmak için bir fabrika yöntemi ARGeospatialCreatorOrigin ekleyin ve gerekli sezyum bileşenlerini ekleyin. Aşağıdaki kod, kalkış noktasını yakındaki bir enlem, boylam ve Rakım'a dokunun ve verilen Harita Parçası API anahtarını kullanarak:

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

Varsayılan olarak, bu nesne Unity dünya koordinatlarında (0, 0, 0) konumuna yerleştirilir ve bu örnekte iyi sonuç verir.

ARAnchorManager referansını alın

ARAnchorManager coğrafi çapaları çalışma zamanında çözmek için gereklidir. Böylece, sahnedeki ARAnchorManager öğesine de referans verilmesi gerekir. ARCore Uzantıları ile paket halinde sunulan Geospatial Sample uygulaması, Yönetici, "AR Oturumu Kaynağı"na eklenmiş GameObject. Diyelim ki sabit bir yönetici kullanırsanız buna ilişkin referans alabilirsiniz. bu:

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

Artık bir kaynağınız ve bağlayıcı yöneticiniz olduğuna göre ARGeospatialCreatorAnchor nesne.

Arazi bağlayıcıları oluşturma

Aşağıdaki iki boyutlu double değerlerini temsil eden diziyi inceleyin: doğuya bakan tarafındaki üç noktadaki tam enlem ve boylama ABD'nin Kaliforniya eyaletindeki San Francisco şehrindeki Belediye Binası:

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

Bu konumların her birine, zemine bir metre küp yerleştirmek istediğinizi varsayalım seviyesinde çok çalışıyoruz. Aşağıdaki kod, ARGeospatialCreatorAnchor nesneleri belirler ve özelliklerini uygun değerlere sahip olduğundan emin olun:

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;
}

Bu işlem, her noktada arazi çapaları oluşturur. Coğrafi Oluşturucu otomatik olarak hesaplayarak çapaları uygun Unity dünya koordinatlarına yerleştirir ARGeospatialCreatorOrigin nesnesine göre konumu. bir arazi çapasının rakımı varsa, Altitude özelliğini metre cinsinden ayarlayın veya bir zemin kaplayan yüzey.

Çalışma zamanında, arazi çapaları koşu uygulaması için yer seviyesinde çözümlenir. Altitude özelliği tarafından uzaklaştırılır. Ancak Editör'ün sahne görünümünde 3D bloka göre değil, varsayılan olarak 0 olan WGS84 rakımında oluşturulur tıklayın. Bunları genellikle görmek istediğiniz yer değildir; bu nedenle Düzenleyici'nin sahne görünümünde sabit reklamın varsayılan rakımını UseEditorAltitudeOverride mülkü, true bölgesine ait ve rakımı şu şekilde belirtiyor: EditorAltitudeOverride mülkünü kullanarak WGS84 metre:

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

Bu iki özelliğin Düzenleyici modu dışında herhangi bir etkisi yoktur ve çalışan uygulamada derlenir.

City Hall Plaza&#39;da Coğrafi Çapa

Çatı çapası oluşturma

Bir sonraki demiri için, şehrin çatısına bir çapa yerleştirmek istediğinizi varsayalım Salon. Sabit, AltitudeType hariç aynı şekilde oluşturulabilir. özellik AnchorAltitudeType.Rooftop olarak ayarlanırsa:

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;

Arazi çapalarına benzer şekilde, bir çatının rakımında ince ayar yapabilirsiniz UseEditorAltitudeOverride ve düğmeleri kullanarak Düzenleyici'nin sahne görünümüne sabitleyin EditorAltitudeOverride mülk. Bu örnekte, yüksekliğin WGS84 rakımının yaklaşık 10,7 metre yüksekliğindedir.

Çatıda Coğrafi Çapa

Belirli bir rakımda çapa oluşturma

Son çapımız Belediye Binası'nın kubbesinin en üstüne yerleştirilecek. Örneğin, olduğu için, tam rakım önemlidir. Bu nedenle, istediğiniz rakıma arazi veya çatı çapası yerine bir WGS84 çapası kullanarak:

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;

Rakım WGS84'e göre zaten belirtilmiştir. Elbette, Harita Karolarının yüksekliği editördeki geometrinin gerçek dünyaya kıyasla yanlış olduğu ortaya çıktı. Sahnedeki çapa yerini yeniden konumlandırmak için düzenleyicinin geçersiz kılmasını kullanmaya devam edebilirsiniz. görünüm.

Kubbede coğrafi çapa