لنگرها را در Geospatial Creator in Unity به صورت برنامه‌نویسی ایجاد و ویرایش کنید

این راهنما نحوه استفاده از Geospatial Creator را برای نوشتن اسکریپت های C# برای انجام سریع وظایف رایج مانند ایجاد و جابجایی اشیاء ARGeospatialCreatorAnchor در حالت ویرایش Unity توضیح می دهد. این می تواند برای ایجاد چندین لنگر از یک لیست از پیش تعریف شده مانند یک صفحه گسترده یا یک فایل KML مفید باشد.

Geospatial Creator در Unity به شما امکان می دهد محتوای Geospatial را در ویرایشگر Unity پیش نمایش کنید. راهنمای شروع سریع ما Geospatial Creator را معرفی می‌کند و شما را راهنمایی می‌کند که چگونه اولین تجربه AR با قابلیت Geospatial را با حداقل برنامه‌نویسی، با استفاده از رابط کاربری ویرایشگر Unity بسازید. برای پروژه های پیشرفته تر، ممکن است بخواهید به جای استفاده از رابط کاربری Unity Editor، GameObjects Geospatial Creator را به صورت برنامه نویسی ایجاد و دستکاری کنید.

این راهنما فرض می‌کند که شما با مفاهیم اولیه Geospatial Creator معرفی شده در Quickstart آشنا هستید و آماده هستید که لنگرهای Geospatial Creator را به یک صحنه اضافه کنید. شما باید Geospatial Creator را با کلیدهای API خود و همچنین اشیاء جلسه AR اولیه در صحنه خود فعال و پیکربندی کنید. اگر از ابتدا شروع می‌کنید، قبل از ادامه، راهنمای شروع سریع را از طریق بخش «فعال کردن ایجادکننده مکانی» دنبال کنید.

شروع کردن

برای این مثال، فرض کنید مجموعه‌ای از مکان‌های شناخته شده در اطراف شهرداری در سانفرانسیسکو، کالیفرنیا، ایالات متحده آمریکا دارید که می‌خواهید محتوای AR را در آن قرار دهید. شما باید در هر یک از این مکان ها اشیاء لنگر ایجاد کنید و سپس هندسه اولیه را به آن لنگرها متصل کنید.

قبل از اینکه بتوانید لنگر ایجاد کنید، باید یک ARGeospatialCreatorOrigin را مشخص کنید، که یک نقطه مرجع برای تبدیل طول و عرض جغرافیایی، طول جغرافیایی و ارتفاعات به و از مختصات جهانی Unity است. مبدا همچنین شامل یک زیرمجموعه CesiumGeoreference و یک شی فرزند Cesium3DTileset است که به Cesium اجازه می‌دهد منطقه اطراف را در نمای صحنه ویرایشگر Unity رندر کند. برای این کار به یک کلید Google Map Tiles API همانطور که در Quickstart توضیح داده شده است نیاز دارید

یک مبدا ایجاد کنید

API برای Geospatial Creator شامل یک روش کارخانه برای ایجاد یک ARGeospatialCreatorOrigin در صحنه و افزودن اجزای سزیوم مورد نیاز است. کد زیر مبدا را در عرض جغرافیایی، طول و ارتفاع نزدیک و با استفاده از کلید Map Tiles API ایجاد می کند:

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

به طور پیش فرض، این شی در (0، 0، 0) در مختصات جهانی Unity قرار می گیرد که برای این مثال به خوبی کار می کند.

مرجع ARAnchorManager را دریافت کنید

یک ARAnchorManager برای حل لنگرهای مکانی در زمان اجرا مورد نیاز است، بنابراین شما همچنین به ارجاع به ARAnchorManager در صحنه نیاز دارید. اگر با برنامه Geospatial Sample همراه با ARCore Extensions شروع کرده اید، Anchor Manager به GameObject "AR Session Origin" متصل می شود. با فرض اینکه دقیقاً یک انکر منیجر در صحنه خود دارید، می توانید به آن مرجعی مانند زیر دریافت کنید:

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

اکنون که یک مبدا و یک مدیر لنگر دارید، می توانید شروع به ایجاد آبجکت های ARGeospatialCreatorAnchor کنید.

لنگرهای زمینی ایجاد کنید

آرایه دوبعدی زیر را از مقادیر double در نظر بگیرید که نشان دهنده طول و عرض جغرافیایی دقیق در سه نقطه در سمت شرق تالار شهر در سانفرانسیسکو، کالیفرنیا، ایالات متحده است:

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 ما قرار دهید. کد زیر اشیاء 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 به طور خودکار لنگرها را با محاسبه مکان آنها نسبت به شی ARGeospatialCreatorOrigin در مختصات جهانی Unity مناسب قرار می دهد. برای تنظیم ارتفاع یک لنگر زمین، ویژگی Altitude را بر حسب متر بالاتر یا زیر سطح زمین تنظیم کنید.

در زمان اجرا، لنگرهای زمین در سطح زمین برای برنامه در حال اجرا، با ویژگی Altitude جبران می‌شوند. با این حال، در نمای صحنه ویرایشگر، آنها به طور پیش فرض در ارتفاع WGS84 0 ارائه می شوند، نه نسبت به هندسه کاشی سه بعدی. این اغلب جایی نیست که شما دوست دارید آنها را ببینید، بنابراین می توانید با تنظیم ویژگی UseEditorAltitudeOverride روی true و تعیین ارتفاع در WGS84 متر با استفاده از ویژگی EditorAltitudeOverride ، ارتفاع پیش فرض لنگر را در نمای صحنه ویرایشگر لغو کنید:

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

این دو ویژگی خارج از حالت ویرایشگر هیچ تأثیری ندارند و در برنامه در حال اجرا کامپایل نمی شوند.

Geospatial Anchor in City Hall Plaza

یک لنگر روی پشت بام ایجاد کنید

برای لنگر بعدی ما، فرض کنید می خواهید یک لنگر در پشت بام شهرداری قرار دهید. لنگر را می توان دقیقاً به همین روش ایجاد کرد، به جز اینکه ویژگی 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 متر است.

Geospatial Anchor on the roof

یک لنگر در یک ارتفاع خاص ایجاد کنید

لنگر نهایی ما در بالای گنبد تالار شهر قرار خواهد گرفت. برای این لنگر، ارتفاع دقیق مهم است، بنابراین با استفاده از لنگر 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 مشخص شده است. البته، اگر ارتفاع هندسه Map Tiles در ویرایشگر در مقایسه با دنیای واقعی نادرست بود، همچنان می‌توانید از حذف ویرایشگر برای تغییر مکان لنگر در نمای صحنه استفاده کنید.

Geospatial Anchor on the dome