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