إنشاء علامات ارتساء وتعديلها آليًا في أداة Geospatial Creator في Unity

يوضّح هذا الدليل كيفية استخدام أداة "إنشاء المحتوى المكاني" لكتابة نصوص برمجية بلغة C# لإنجاز المهام الشائعة بسرعة، مثل إنشاء عناصر ARGeospatialCreatorAnchor ونقلها في وضع "التعديل" في Unity. يمكن أن يكون ذلك مفيدًا لإنشاء عدّة عناصر ربط من قائمة محدّدة مسبقًا، مثل جدول بيانات أو ملف KML.

يتيح لك تطبيق Geospatial Creator في Unity معاينة المحتوى الجغرافي المكاني في أداة Unity Editor. يقدّم دليل البدء السريع أداة Geospatial Creator ويرشدك إلى كيفية إنشاء تجربتك الأولى للواقع المعزّز المزوّدة بميزة "الاستناد إلى الموقع الجغرافي" باستخدام الحد الأدنى من البرمجة، وذلك باستخدام واجهة مستخدم Unity Editor. بالنسبة إلى المشاريع الأكثر تقدمًا، قد تحتاج إلى إنشاء ملف ‎GGeospatial Creator GameObjects وتعديله آليًا بدلاً من استخدام واجهة مستخدم ‎Unity Editor.

يفترض هذا الدليل أنّك على دراية بالمفاهيم الأساسية لميزة "الاستكشاف المكاني" التي تم تقديمها في دليل "البدء السريع"، وأنّك مستعد لبدء إضافة نقاط تثبيت "الاستكشاف المكاني" إلى أحد المشاهد. يجب تفعيل ميزة "الاستكشاف المكاني" و ضبطها باستخدام مفاتيح واجهة برمجة التطبيقات، بالإضافة إلى عناصر جلسة الواقع المعزّز الأولية في المشهد. إذا كنت تبدأ من الصفر، اتّبِع دليل "البدء السريع" بالكامل، بما في ذلك القسم "تفعيل أداة "البناء في الفضاء الجغرافي" قبل المتابعة.

الخطوات الأولى

في هذا المثال، لنفترض أنّ لديك مجموعة من المواقع الجغرافية المعروفة حول مبنى البلدية في سان فرانسيسكو، كاليفورنيا، الولايات المتحدة، حيث تريد عرض محتوى الواقع المعزّز. ستحتاج إلى إنشاء عناصر ربط في كل موقع من هذه المواقع، ثم إرفاق شكل dasar بهذه العناصر.

قبل أن تتمكّن من إنشاء نقاط تثبيت، عليك تحديد ARGeospatialCreatorOrigin، وهي نقطة مرجعية لتحويل خطوط العرض وخطوط الطول والارتفاعات من إحداثيات العالم في Unity وإليها. سيتضمّن المصدر أيضًا مكوّنًا فرعيًا CesiumGeoreference وموضوعًا فرعيًا Cesium3DTileset، ما يسمح لخدمة Cesium بعرض المنطقة المجاورة في عرض "المشهد" في محرِّر Unity. ولإجراء ذلك، تحتاج إلى مفتاح واجهة برمجة التطبيقات Tiles API في "خرائط Google" كما هو موضّح في التشغيل السريع.

إنشاء نقطة انطلاق

تتضمّن واجهة برمجة التطبيقات لتطبيق "الاستكشاف المكاني" طريقة إنشاء لإنشاء ARGeospatialCreatorOrigin في المشهد وإضافة مكوّنات Cesium المطلوبة. تنشئ التعليمة البرمجية التالية نقطة المصدر عند خط عرض وخط طول و ارتفاع قريبَين، وذلك باستخدام مفتاح واجهة برمجة التطبيقات Map Tiles API المحدَّد:

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

يتم تلقائيًا وضع هذا الجسم عند (0, 0, 0) في إحداثيات عالم Unity، وهو يعمل بشكل جيد مع هذا المثال.

الحصول على مرجع ARAnchorManager

يجب استخدام ARAnchorManager لحلّ نقاط الربط المكانية الجغرافية أثناء التشغيل، لذا تحتاج أيضًا إلى مرجع إلى ARAnchorManager في المشهد. إذا كنت قد بدأت باستخدام تطبيق "عيّنات البيانات الجغرافية" المُدمَج مع إضافات ARCore، يتم إرفاق "مدير مثبّت العلامات" بجسم اللعبة "أصل جلسة الواقع المعزّز". بافتراض أنّ لديك مدير عنصر تثبيت واحدًا بالضبط في المشهد، يمكنك الحصول على إشارة إليه على النحو التالي:

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

لنفترض أنّك تريد وضع مكعب أبعاده متر واحد في كلّ من هذه المواقع الجغرافية، على مستوى سطح الأرض، في تطبيق الواقع المعزّز. تنشئ التعليمة البرمجية التالية عناصر 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;
}

يؤدي ذلك إلى إنشاء نقاط تثبيت للتضاريس في كل نقطة. يضع تطبيق "الاستكشاف المكاني" تلقائيًا نقاط الربط في إحداثيات العالم المناسبة في Unity، وذلك من خلال احتساب موقعها الجغرافي بالنسبة إلى عنصر ARGeospatialCreatorOrigin. لضبط ارتفاع عنصر تثبيت التضاريس، اضبط سمة Altitude بالمتر فوق سطح التضاريس أو أسفله.

أثناء التشغيل، سيتمّ حلّ نقاط تثبيت التضاريس على مستوى سطح الأرض للتطبيق الذي يتم تشغيله، مع إزاحتها باستخدام السمة Altitude. في "عرض المشهد" في "أداة التعديل"، يتم عرضها عند ارتفاع 0 وفقًا لنظام WGS84 تلقائيًا، وليس بالنسبة إلى هندسة الشبكة الثلاثية الأبعاد. لا يكون هذا عادةً هو المكان الذي تريد أن تظهر فيه، لذا يمكنك إلغاء أثر الارتفاع التلقائي للنقطة المرجعية في طريقة عرض المشهد في "المحرِّر" من خلال ضبط قيمة السمة UseEditorAltitudeOverride على true وتحديد الارتفاع بوحدة متر WGS84 باستخدام السمة EditorAltitudeOverride:

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

لا يكون لهذين السمتَين أي تأثير خارج "وضع المحرِّر"، ولا يتم compiling هما في التطبيق المشغّل.

نقطة مرجعية جغرافية في ساحة دار البلدية

إنشاء نقطة تثبيت على سطح المنزل

بالنسبة إلى النقطة التالية، لنفترض أنّك تريد وضع نقطة على سطح مبنى البلدية. يمكن إنشاء العنصر النائب بالطريقة نفسها تمامًا، باستثناء ضبط 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. بالطبع، إذا تبيّن أنّ ارتفاع هندسة وحدات مخطّط التجوّل في المحرِّر غير صحيح مقارنةً بالعالم الحقيقي، سيظل بإمكانك استخدام ميزة إلغاء الإعدادات في المحرِّر لإعادة وضع نقطة الربط في عرض المشهد.

عنصر مرجعي جغرافي على القبة