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

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

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

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

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

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

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

إنشاء مصدر

تتضمّن واجهة برمجة التطبيقات لأداة إنشاء المواقع الجغرافية المكانية طريقة من المصنع لإنشاء ARGeospatialCreatorOrigin في المشهد وإضافة مكوّنات السيزيوم المطلوبة. ينشئ الكود التالي المصدر عند خط عرض وخط طول وارتفاع قريبين، وباستخدام مفتاح واجهة برمجة التطبيقات Map Tiles المعطى:

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

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

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

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

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

مرسى جيوفضائي على القبة