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

Bu kılavuzda, Unity'nin Düzenleme modunda ARGeospatialCreatorAnchor nesneleri oluşturma ve taşıma gibi yaygın görevleri hızlı bir şekilde tamamlamak için C# komut dosyaları yazmak üzere Geospatial Creator'ın nasıl kullanılacağı açıklanmaktadır. Bu, e-tablo veya KML dosyası gibi önceden tanımlanmış bir listeden birden fazla ankraj oluşturmak için yararlı olabilir.

Unity'deki Coğrafi İçerik Oluşturucu, Unity Düzenleyici'de coğrafi içeriği önizlemenize olanak tanır. Hızlı Başlangıç Kılavuzumuzda Geospatial Creator'ı tanıtıyoruz ve Unity Editor kullanıcı arayüzünü kullanarak minimum düzeyde programlamayla ilk coğrafi bilgi destekli AR deneyiminizi nasıl oluşturacağınız konusunda size yol gösteriyoruz. Daha gelişmiş projeler için Unity Editor kullanıcı arayüzünü kullanmak yerine Coğrafi Oluşturucu oyun nesnelerini programatik olarak oluşturup değiştirmek isteyebilirsiniz.

Bu kılavuzda, Hızlı Başlangıç bölümünde açıklanan temel Coğrafi İçerik Üretici kavramlarını bildiğinizi ve bir sahneye Coğrafi İçerik Üretici ankrajları eklemeye hazır olduğunuz varsayılmaktadır. Geospatial Creator'ı etkinleştirip API anahtarlarınızla yapılandırmanız ve sahnenizdeki ilk AR oturumu nesnelerini kullanmanız gerekir. Sıfırdan başlıyorsanız devam etmeden önce Hızlı Başlangıç Kılavuzu'ndaki "Coğrafi Veri Oluşturucu'yu etkinleştirin" bölümünü de dahil olmak üzere kılavuzu uygulayın.

Başlarken

Bu örnekte, ABD'nin Kaliforniya eyaletinin San Francisco şehrindeki Belediye Binası çevresinde, AR içeriği yerleştirmek istediğiniz bilinen bir dizi konum olduğunu varsayalım. Bu konumların her birinde ankraj nesneleri oluşturmanız ve ardından bu ankrajlara temel geometri eklemeniz gerekir.

Sabit nokta oluşturmadan önce, enlemleri, boylamları ve rakım değerlerini Unity dünya koordinatlarına dönüştürmek için referans noktası olan bir ARGeospatialCreatorOrigin belirtmeniz gerekir. Köken, bir CesiumGeoreference alt bileşeni ve Cesium3DTileset alt nesnesi de içerir. Bu, Cesium'un Unity düzenleyicisinin Sahne görünümünde çevredeki alanı oluşturmasına olanak tanır. Bunun için Hızlı Başlangıç bölümünde açıklandığı şekilde bir Google Haritalar Kartları API anahtarına ihtiyacınız vardır.

Başlangıç noktası oluşturma

Geospatial Creator API'si, sahnede ARGeospatialCreatorOrigin oluşturmak ve gerekli Cesium bileşenlerini eklemek için bir fabrika yöntemi içerir. Aşağıdaki kod, belirtilen Map Tiles API anahtarını kullanarak yakın bir enlem, boylam ve rakımda başlangıç noktasını oluşturur:

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

Bu nesne varsayılan olarak Unity dünya koordinatlarında (0, 0, 0) yerleştirilir. Bu örnek için bu konum uygundur.

ARAnchorManager referansını alma

Coğrafi yer işaretlerinin çalışma zamanında çözülmesi için bir ARAnchorManager gerekir. Bu nedenle, sahnede ARAnchorManager referansı da kullanmanız gerekir. ARCore uzantılarıyla birlikte sunulan Coğrafi Örnek uygulamasıyla başladıysanız Anchor Yöneticisi, "AR Oturum Başlangıcı" oyun nesnesine eklenir. Sahnenizde tam olarak bir ana yöneticiniz olduğunu varsayarak aşağıdaki gibi bir referans alabilirsiniz:

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

Bir kaynak ve ana yöneticiniz olduğuna göre ARGeospatialCreatorAnchor nesnelerini oluşturmaya başlayabilirsiniz.

Arazi sabitleyicileri oluşturma

ABD, Kaliforniya, San Francisco'daki Belediye Binası'nın doğuya bakan tarafındaki üç noktadaki tam enlem ve boylamı temsil eden aşağıdaki iki boyutlu double değerleri dizisini düşünün:

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

AR uygulamamızda bu konumların her birine zemin seviyesinde bir metre küp yerleştirmek istediğinizi varsayalım. Aşağıdaki kod, ARGeospatialCreatorAnchor nesneleri oluşturur ve özelliklerini uygun değerlere atar:

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 sabitlemeleri oluşturur. Coğrafi Oluşturucu, ARGeospatialCreatorOrigin nesnesine göre konumlarını hesaplayarak sabit noktaları otomatik olarak uygun Unity dünya koordinatlarına yerleştirir. Bir arazi sabit noktasının yüksekliğini ayarlamak için Altitude mülkünü arazi yüzeyinin üstünde veya altında metre cinsinden ayarlayın.

Çalışma zamanında, arazi sabitlemeleri, çalışan uygulama için zemin seviyesinde çözülür ve Altitude mülkü tarafından kaydırılır. Ancak Düzenleyici'nin sahne görünümünde, 3D karo geometrisine göre değil, varsayılan olarak 0 WGS84 yüksekliğinde oluşturulurlar. Bu genellikle onları görmek istediğiniz yer değildir. Bu nedenle, UseEditorAltitudeOverride mülkünü true olarak ayarlayarak ve EditorAltitudeOverride mülkünü kullanarak rakımı WGS84 metre cinsinden belirterek Editor'ın sahne görünümünde ankrajın varsayılan rakımını geçersiz kılabilirsiniz:

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

Bu iki mülkün Düzenleyici modu dışında bir etkisi yoktur ve çalışan uygulamada derlenmez.

Belediye Binası Meydanı&#39;ndaki Coğrafi Yerleşim Noktası

Çatı bağlantı noktası oluşturma

Bir sonraki yer işaretimiz için Belediye Sarayı'nın çatısına yer işareti yerleştirmek istediğinizi varsayalım. AltitudeType mülkü AnchorAltitudeType.Rooftop olarak ayarlandığından hariç olmak üzere, ankraj tam olarak aynı şekilde oluşturulabilir:

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 ankrajlarına benzer şekilde, UseEditorAltitudeOverride ve EditorAltitudeOverride özelliklerini kullanarak Düzenleyici'nin sahne görünümünde bir çatı ankrajının yüksekliğinde ince ayar yapabilirsiniz. Bu örnekte, çatıya ait WGS84 yüksekliği yaklaşık 10,7 metredir.

Çatıda coğrafi konum işaretçisi

Belirli bir yükseklikte ankraj oluşturma

Son sabitleme noktamız, Belediye Binası'nın kubbesinin en üstüne yerleştirilecek. Bu ankraj için kesin rakım önemlidir. Bu nedenle, arazi veya çatı ankrajı yerine WGS84 ankrajı kullanarak ankrajı açıkça ayarlarsınız:

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;

Yükseklik zaten WGS84'e göre belirtildiğinden, yalnızca düzenleyiciye yönelik yükseklik geçersiz kılma özelliğini kullanmanız gerekmez. Elbette, düzenleyicideki harita karoları geometrisinin gerçek dünyaya kıyasla yanlış olduğu ortaya çıkarsa sahne görünümünde ankrajı yeniden konumlandırmak için düzenleyici geçersiz kılma özelliğini yine kullanabilirsiniz.

Kubbede coğrafi konumlandırma noktası