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

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

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

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

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

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

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

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

مراسي جيوفضائية في &quot;سيتي هول بلازا&quot;

إنشاء مرساة على السطح

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

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

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