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