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

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

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

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

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

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

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

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

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

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

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

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

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