Bu kılavuzda, Unity'nin Düzenleme modunda ARGeospatialCreatorAnchor
nesneleri oluşturma ve taşıma gibi yaygın görevleri hızlıca tamamlamak için C# komut dosyaları yazmak üzere Geospatial Creator'ın nasıl kullanılacağı açıklanmaktadır. Bu, elektronik tablo veya KML dosyası gibi önceden tanımlanmış bir listeden birden fazla ankraj oluşturmak için yararlı olabilir.
Unity'deki Geospatial Creator, Unity Editor'da coğrafi içeriği önizlemenize olanak tanır. Hızlı Başlangıç Kılavuzumuzda Coğrafi Oluşturucu'yu 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ş 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, Hızlı Başlangıç bölümünde açıklanan temel Geospatial Creator kavramlarına aşina olduğunuz ve bir sahneye Geospatial Creator ankrajları eklemeye hazır olduğunuz varsayılmaktadır. Geospatial Creator'ı etkinleştirmeniz ve ve sahne. Baştan başlıyorsanız devam etmeden önce Hızlı Başlangıç Kılavuzu'ndaki "Coğrafi Veri Oluşturucu'yu etkinleştirme" 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.
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.
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.
Kaynak 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 orijin 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
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'i tıklayın. Sahnenizde tam olarak bir ana yöneticiniz olduğunu varsayarak aşağıdaki gibi bir referans alabilirsiniz:
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
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ğer 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
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, 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 çapaları koşu uygulaması için zemin düzeyinde çözümlenir.
Altitude
özelliği tarafından uzaklaştı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. 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.
Çatı çapası 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ç, 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 ç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, çatıya ait WGS84 yüksekliği yaklaşık 10,7 metredir.
Belirli bir rakımda çapa oluşturma
Son sabitleme noktamı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;
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, Harita Karolarının yüksekliği editördeki geometrinin gerçek dünyaya kıyasla yanlış olduğu ortaya çıktı. Sahnedeki bağlayıcıyı yeniden konumlandırmak için düzenleyicinin geçersiz kılmasını kullanmaya devam edebilirsiniz. görünüm.