Bu kılavuzda, Unity'nin Düzenleme modunda ARGeospatialCreatorAnchor
nesneleri oluşturma ve taşıma gibi yaygın görevleri hızla yerine getirmek amacıyla C# komut dosyaları yazmak için Geospatial Creator'ın nasıl kullanılacağı açıklanmaktadır. Bu özellik, e-tablo veya KML dosyası gibi önceden tanımlanmış bir listeden birden fazla bağlayıcı oluşturmak için yararlı olabilir.
Unity'deki Geospatial Creator, Coğrafi içeriği Unity Düzenleyici'de önizlemenizi sağlar. Hızlı Başlangıç Kılavuzumuz Geospatial Creator'ı tanıtıyor ve Unity Editor kullanıcı arayüzünü kullanarak Geospatial özellikli ilk AR deneyiminizi minimum programlamayla nasıl oluşturacağınızı adım adım gösteriyor. Daha gelişmiş projeler için Unity Editor kullanıcı arayüzünü kullanmak yerine Geospatial Creator GameObjects öğelerini programatik olarak oluşturmak ve değiştirmek isteyebilirsiniz.
Bu kılavuzda, Hızlı Başlangıç Kılavuzu'nda açıklanan temel Coğrafi İçerik Oluşturucu kavramlarına aşina olduğunuz ve bir sahneye Coğrafi İçerik Oluşturucu çapaları eklemeye hazır olduğunuz varsayılır. Bunun için Geospatial Creator'ı etkinleştirmeniz ve API anahtarlarınızla ve sahnenizdeki ilk AR oturumu nesnelerini yapılandırmış olmanız gerekir. Sıfırdan başlıyorsanız devam etmeden önce Hızlı Başlangıç kılavuzundaki talimatları uygulayarak "Coğrafi Mekansal İçerik Oluşturucuyu Etkinleştir" bölümünü inceleyin.
Başlarken
Bu örnekte, San Francisco, Kaliforniya, ABD'deki Belediye Binası çevresinde AR içeriği yerleştirmek istediğiniz bir dizi bilinen konumunuz olduğunu varsayalım. Bu konumların her birinde çapa nesneleri oluşturmanız ve daha sonra bu sabitleyicilere temel geometriyi eklemeniz gerekir.
Çapa oluşturabilmeniz için öncelikle bir ARGeospatialCreatorOrigin
belirtmelisiniz. Bu, enlemleri, boylamları ve rakımları Unity dünya koordinatlarına ve bu koordinatlardan diğerine dönüştürmek için kullanılacak bir referans noktasıdır.
Kaynak ayrıca bir CesiumGeoreference
alt bileşeni ve bir Cesium3DTileset
alt nesnesi içerir. Böylece Cesium, Unity düzenleyicinin Scene görünümünde etrafındaki alanı oluşturabilir. Bunun için, Hızlı Başlangıç Kılavuzu'nda açıklandığı gibi bir Google MapTiles API anahtarına
ihtiyacınız vardır.
Kaynak Oluştur
Geospatial Creator API'si, sahnede bir ARGeospatialCreatorOrigin
oluşturmak ve gerekli Cesium bileşenlerini eklemek için fabrikada kullanılan bir yöntem içerir.
Aşağıdaki kod, verilen Map Tiles API anahtarını kullanarak başlangıç noktasını yakındaki bir enlem, boylam ve rakımda oluşturur:
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 örnek için uygundur.
ARAnchorManager
Referansını Edinin
Coğrafi çapaların çalışma zamanında çözümlenmesi için bir ARAnchorManager
gereklidir. Bu nedenle, sahnedeki ARAnchorManager
referansına da ihtiyacınız olur. ARCore Uzantılarıyla paket halinde sunulan Geospatial Sample uygulamasını kullanmaya başladıysanız, Anchor Manager "AR Session Origin" GameObject'e eklenir. Sahnenizde tam olarak bir sabit yönetici olduğunu varsayarsak buna aşağıdaki şekilde bir referans alabilirsiniz:
ARAnchorManager anchorManager =
Resources.FindObjectsOfTypeAll<ARAnchorManager>()[0];
Artık bir kaynağınız ve bir bağlayıcı yöneticiniz olduğuna göre ARGeospatialCreatorAnchor
nesnelerini oluşturmaya başlayabilirsiniz.
Arazi çapaları oluşturun
ABD'nin Kaliforniya eyaletinin San Francisco şehrindeki Belediye Binası'nın doğu tarafındaki üç noktada kesin 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, yer seviyesinde bu konumların her birine bir metre küp yerleştirmek istediğinizi varsayalım. Aşağıdaki kod ARGeospatialCreatorAnchor
nesneleri oluşturur ve bunların ö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;
}
Böylece her noktada arazi çapaları oluşturulur. Coğrafi İçerik Oluşturucu, çapaların ARGeospatialCreatorOrigin
nesnesiyle göreli konumunu hesaplayarak çapaları uygun Unity dünya koordinatlarına otomatik olarak yerleştirir. Bir arazi çapasının rakımını ayarlamak için Altitude
özelliğini arazi yüzeyinin metre cinsinden üstünde veya altında olacak şekilde ayarlayın.
Çalışma zamanında arazi çapaları, çalışan uygulama için yer seviyesinde çözümlenir ve Altitude
özelliği ile belirlenir. Ancak bu öğeler, Düzenleyici'nin sahne görünümünde 3D karo geometrisine göre değil, varsayılan olarak 0 WGS84 rakımıyla oluşturulur. Bu genellikle bunları görmek istediğiniz yer değildir. Bu nedenle, UseEditorAltitudeOverride
özelliğini true
olarak ayarlayıp EditorAltitudeOverride
özelliğini kullanarak WGS84 metre cinsinden yüksekliği belirterek Düzenleyici'nin sahne görünümünde sabit reklamı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 özelliğin Düzenleyici modu dışında etkisi yoktur ve çalışan uygulamada derlenmez.
Çatı çapası oluşturun
Bir sonraki bağlantı noktamız için City Hall'un çatısına bir çapa yerleştirmek istediğinizi
varsayalım. Anchor, AltitudeType
özelliğinin AnchorAltitudeType.Rooftop
değerine ayarlanması dışında 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 çapalarına benzer şekilde, UseEditorAltitudeOverride
ve EditorAltitudeOverride
özelliklerini kullanarak Düzenleyici'nin sahne görünümünde bir çatı sabitinin rakımının ince ayarını yapabilirsiniz. Bu örnekte, WGS84'ün çatısının rakımı yaklaşık 10,7 metredir.
Belirli bir rakımda çapa oluşturma
Nihai çapamız Belediye Sarayı'nın kubbesinin en tepesine yerleştirilecektir. Bu çapa için rakım tam olarak önemlidir. Bu yüzden, arazi veya çatı çapası yerine WGS84 çapası kullanarak bunu açıkça belirlemelisiniz:
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 zaten WGS84'e göre belirtildiğinden, yalnızca düzenleyicinin kullanabileceği rakım geçersiz kılma işlevini kullanmanıza gerek yoktur. Elbette, düzenleyicideki Harita Kutuları geometrisinin yüksekliği gerçek dünyaya kıyasla yanlış ortaya çıkarsa, çapa yerini sahne görünümünde yeniden konumlandırmak için düzenleyici geçersiz kılma özelliğini kullanabilirsiniz.