لمحة عن هذا الدرس التطبيقي حول الترميز
1. نظرة عامة
ARCore هو إطار عمل Google لإنشاء تجارب الواقع المعزّز على الهواتف الذكية. يمكنك استخدام AR Foundation من Unity لإنشاء تطبيقات الواقع المعزّز من عدّة منصات.
ما ستُنشئه
في هذا الدليل التعليمي حول البرمجة، ستُنشئ لعبة بسيطة باستخدام AR Foundation. هدف اللعبة هو جمع الطرود باستخدام سيارة تتحكّم فيها باستخدام جهازك الجوّال.
ومع ذلك، لن يحدث هذا في عالم افتراضي تمامًا! سيكون عليك مزج الذرّات والعناصر الرقمية لتوفير نوع جديد من تجارب اللاعبين من خلال إنشاء لعبة تستوعب البيئة المحيطة باللاعب.
بنهاية هذا الدليل التعليمي حول الرموز البرمجية، ستتمكّن لعبتك من تنفيذ ما يلي:
- يمكنك رصد الطائرات في العالم الحقيقي ورسم ملعب فوقها.
- بث أشعة من زاوية رؤية الكاميرا ورصد التقاطعات مع المستويات
- وبإمكانك التفاعل مع ظروف الإضاءة الفعلية لإضفاء المزيد من الواقعية على لعبتك.
المُعطيات
- كيف يمكن إعداد مشروع يستخدم مؤسسة AR Foundation من Unity.
- كيفية استخدام
ARPlaneManager
للاشتراك في طائرات جديدة - كيفية استخدام
Raycast
للعثور على التقاطعات باستخدام الهندسة الافتراضية - كيفية استخدام
ARLightEstimationData
لإضاءة المشهد
المتطلبات
- جهاز ARCore متوافق ومتصل بجهاز التطوير باستخدام كابل USB.
- خدمات Google Play للواقع المعزّز 1.23 أو إصدار أحدث
- تثبيت Unity Hub أو Unity 2020 LTS
2. إعداد بيئة التطوير
في هذه الخطوة، ستعمل على تجهيز بيئتك للتطوير باستخدام AR Foundation من Unity.
التأكّد من توافق جهازك مع ميزة "الواقع المعزّز"
تعتمد تجارب الواقع المعزّز على أجهزة Android على ARCore، وهي متاحة على الأجهزة المتوافقة مع ARCore. يجب التأكّد من توافق جهاز التطوير مع الواقع المعزّز. بدلاً من ذلك، يمكنك استخدام مثيل Android Emulator المتوافق مع الواقع المعزّز والذي تم إعداده بشكل صحيح.
إعداد تصحيح أخطاء USB على جهازك
يجب تفعيل خيارات المطوّرين على جهازك لتشغيل تطبيقات تصحيح الأخطاء. وإذا لم تكن قد فعلت ذلك بعد، راجِع وثائق Android عن تفعيل خيارات المطوّرين وتصحيح أخطاء الجهاز عبر USB.
تثبيت Unity (2020.3 LTS)
ثبِّت Unity 2020 LTS على محطة العمل. في هذا الدرس التطبيقي حول الترميز، يتم عرض لقطات شاشة لواجهة مستخدم Unity بإصدار 2020.3 (LTS). قد تنجح إصدارات أخرى من Unity، ولكن قد تتطلّب خطوات إضافية. وقد يبدو مختلفًا عن لقطات الشاشة المعروضة هنا.
إنشاء مشروع جديد
أنشئ مشروعًا جديدًا باستخدام نموذج مسار العرض العام. أدخِل اسمًا وصفيًا وموقعًا جغرافيًا مناسبًا، ثم اضغط على إنشاء.
تثبيت الأطر المطلوبة
يمكن العثور على AR Foundation من Unity في Unity Package Manager.
- افتح هذا التطبيق بالنقر على Window (نافذة) > Package Manager (مدير الحِزم).
- في هذه النافذة، ثبِّت الحِزم التي ستستخدمها في هذا الدرس التطبيقي حول الترميز. يمكنك عرض أحدث النُسخ من أُطر العمل هذه من خلال توسيع الإدخال الخاص بها باستخدام الرمز
►
. ثبِّت أحدث إصدارات من كلٍّ من الإطارات التالية:- مؤسسة AR
- مكوّن ARCore الإضافي للواقع الممتد
عند الانتهاء، من المفترض أن يظهر "مدير الحِزم" على النحو التالي:
تثبيت حزمة المبتدئين
في هذا الدليل التعليمي حول الرموز البرمجية، قدّمنا حزمة للمبتدئين تحتوي على ملفات Prefab والنصوص البرمجية التي ستسرّع بعض أجزاء الدليل التعليمي حتى تتمكّن من التركيز على كيفية استخدام AR Foundation.
- ثبِّت الحزمة الأساسية من خلال فتح مواد العرض > استيراد حزمة > حزمة مخصّصة... وفتح
starter-package.unitypackage
. - في النافذة المنبثقة، تأكَّد من تحديد كل شيء.
- انقر على استيراد.
تغيير إعدادات الإصدار
بما أنّ التطبيق سيتم تشغيله على Android، عليك تغيير نظام التشغيل الأساسي للإنشاء إلى Android:
- افتح ملف > إعدادات الإنشاء.
- في لوحة النظام الأساسي، اختَر Android.
- يمكنك اختياريًا تفعيل الإصدار المخصّص للتطوير وتصحيح أخطاء النصوص البرمجية للاحتفاظ بمعلومات تصحيح الأخطاء أثناء تشغيل تطبيقك.
- انقر على تبديل المنصة.
تغيير إعدادات المشروع
يجب إعداد AR Foundation لإعداد أنظمة XR عند بدء التشغيل.
- افتح تعديل >. إعدادات المشروع... وانقر على قسم إدارة المكون الإضافي XR.
- في علامة التبويب Android، فعِّل ARCore.
- في يمين الصفحة، انقر على قسم المشغّل.
- في علامة التبويب Android، ضمن الإعدادات الأخرى، أزِل Vulkan من Graphics APIs.
- تتطلّب التطبيقات المطلوبة للواقع المعزّز التي تستخدم ARCore مستوى واجهة برمجة تطبيقات يبلغ 24 كحد أدنى. انتقِل للأسفل وابحث عن الحد الأدنى لمستوى واجهة برمجة التطبيقات. اضبط الحد الأدنى لمستوى واجهة برمجة التطبيقات على 24.
إضافة عناصر المشهد المطلوبة
يتضمّن نموذج مسار العرض العام بعض كائنات الألعاب التي لن تستخدمها في هذا البرنامج التعليمي.
- حذف جميع عناصر اللعبة في
SampleScene
- أضِف عناصر AR Foundation. انقر بزر الماوس الأيمن في لوحة التسلسل الهرمي. استخدِم هذه القائمة لإضافة ما يلي:
- XR > جلسة الواقع المعزّز: يتحكّم هذا الكائن في مراحل نشاط تجربة الواقع المعزّز.
- XR > أصل جلسة الواقع المعزّز: يحوّل هذا الكائن إحداثيات الواقع المعزّز إلى إحداثيات عالم Unity.
- خفيفة > إضاءة توجيهية: توفّر هذه الميزة مصدر إضاءة لإضاءة عناصر اللعبة.
يجب أن يبدو التسلسل الهرمي على النحو التالي:
- وسِّع مصدر جلسة الواقع المعزّز الذي أنشأته في التسلسل الهرمي، واختَر كائن كاميرا الواقع المعزّز. في أداة الفحص، غيِّر علامتها إلى MainCamera.
إعداد المعالجة
يحتاج "مسار العرض الشامل" في Unity إلى تغيير واحد لكي يكون متوافقًا مع AR Foundation.
- في لوحة المشروع، انتقِل إلى مواد العرض > الإعدادات للعثور على مادة عرض ForwardRenderer.
- اختَر ForwardRenderer.
- في لوحة "أداة الفحص"، استخدِم إضافة ميزة العارض لإضافة ميزة "عارض خلفية الواقع المعزّز". سيعرض هذا المكوِّن خلاصة الكاميرا في المشهد.
التحقّق من الإعداد
- تأكَّد من توصيل جهازك بالطاقة ومن تفعيل تصحيح أخطاء ADB.
- انقر على ملف > التصميم والتشغيل... سيؤدي هذا إلى تحميل التطبيق على جهازك وتشغيله عند تثبيته.
- من المفترض أن تظهر خلاصة الكاميرا على شاشة جهازك.
في الخطوة التالية، ستبدأ في إضافة وظائف إلى تطبيقك.
3. اكتشِف الطائرات على أرض الواقع
بعد إعداد مشهد أساسي، يمكنك البدء في تطوير اللعبة. في هذه الخطوة، سترصد الطائرات وترسمها في المشهد.
إضافة مكوّن ARPlaneManager
يرصد ARPlaneManager
ARPlane
وينشئ عناصر اللعبة ويحدّثها ويزيلها عندما يتغيّر فهم الجهاز للبيئة.
- باستخدام لوحة التسلسل الهرمي، يمكنك إنشاء
GameObject
فارغة. - أعِد تسميته إلى
Driving Surface Manager
. سيعرض هذا المكوّن الطائرات إلى أن يختار اللاعب طائرة. - اختَر عنصر اللعبة الجديد. في لوحة "المدقق"، انقر على إضافة مكوّن لإضافة مدير سطح AR.
- اضبط
ARPlaneManager
من خلال ضبط الحقلPlane Prefab
:- انقر على الزر بجانب
None
لعرض نافذة اختيار GameObject. - اختَر علامة التبويب مواد العرض وابحث عن مستوى سطح الطريق.
- انقر على الزر بجانب
يوفر هذا الإعداد المسبق من حزمة المبتدئين زخرفة أرضية خشبية تُستخدم كزينة للطائرة.
- تغيير
Detection Mode
إلىHorizontal
يؤدي ذلك إلى ضبطARPlaneManager
بحيث يتم توفير طائرات أفقية فقط، وهي مثالية للقيادة.
إضافة المكوِّن ARRaycastManager
تعرض ARRaycastManager
وظيفة البث الشعاعي. في الخطوة التالية، سنستخدم هذا العنصر لتقديم عناصر التحكّم للمستخدم.
- تأكَّد من اختيار الكائن المسمى
Driving Surface Manager
في لوحة "التدرّج الهرمي". - في "المدقق"، انقر على إضافة مكوّن لإضافة مكوّن
ARRaycastManager
إلى عنصر اللعبة.
ما مِن إعدادات إضافية مطلوبة لهذا المكوّن.
إضافة مكوّن DrivingSurfaceManager
DrivingSurfaceManager
هو نص برمجي مساعد من حزمة المبتدئين يسمح باختيار ARPlane
. بعد اختيار ARPlane
، سيتم إخفاء جميع الطائرات الأخرى، وسيتم إيقاف الطائرات الجديدة.
- تأكَّد من اختيار الكائن المُسمى
Driving Surface Manager
في لوحة "التدرّج الهرمي". - في "أداة الفحص"، انقر على إضافة مكوِّن لإضافة مكوِّن
DrivingSurfaceManager
إلى كائن لعبتك.
ليست هناك حاجة إلى مزيد من الضبط لهذا المكوِّن.
تشغيل التطبيق
- انقر على ملف > Build and Run... لاختبار التغييرات.
- وجِّه جهازك إلى سطح أفقي في العالم وحرِّك جهازك لتحسين فهم ARCore للعالم.
- عندما يرصد ARCore طائرة، من المفترض أن يظهر لك سطح ملوث يغطّي الأسطح في الواقع. تنشئ السمة
ARPlaneManager
مثيلاً للدالةPlane Prefab
المحددة لكل طائرة تم اكتشافها. إنّ الإعداد المسبقDriving Surface Plane
يتضمّن المكوِّنARPlaneMeshVisualizer
الذي ينشئ شبكة متداخلة لـARPlane
محدّد.
في الخطوة التالية، ستستخدم طائرة تم رصدها كملعب.
4. إجراء اختبار إصابة للطائرات التي تم رصدها
في الخطوة السابقة، برمجت تطبيقًا يمكنه رصد الطائرات. تظهر هذه الطائرات في منظر اللعبة. الآن، ستضيف تفاعلًا مع هذه الطائرات من خلال إنشاء شبكة تصويب وسيارة ستسير على سطح الطائرة التي تم رصدها.
إنشاء شبكة تصويب
يتضمن نظام التحكم في هذا التطبيق اللاعب الذي يشير إلى هاتفه إلى سطح. من أجل تقديم ملاحظات مرئية واضحة للموقع المحدد، ستستخدم شبكًا هادفًا.
ولـ "لصق" شبكة الاستهداف هذه بمستوى الواقع المعزّز، استخدِم اختبار الارتطام. اختبار النتائج هو تقنية تحسب التقاطعات عند صب شعاع في اتجاه معين. ستستخدم اختبارًا للنقاط المؤثرة لرصد تقاطع في اتجاه عرض الكاميرا.
إضافة الشبكة
- في لوحة المشروع بالقرب من أسفل الشاشة، انتقِل إلى مواد العرض > حزمة البدء.
- ضع الإعداد المسبق للشبكات في المشهد من خلال سحبه إلى جزء التسلسل الهرمي للمشروع.
- حدد الشبكة في التسلسل الهرمي.
- في "أداة الفحص"، انقر على إضافة مكوِّن. أضِف النص البرمجي
ReticleBehaviour
من حزمة Starter. يحتوي هذا النص على بعض النصوص النموذجية للتحكم في الشبكة. - يعتمد نص
ReticleBehaviour
البرمجي علىDriving Surface Manager
الذي أنشأته من قبل، لذا أضِف الاعتماد بالنقر على أداة اختيارDriving Surface Manager
. اختَر علامة التبويب المشهد وانقر علىDriving Surface Manager
.
تعديل ReticleBehaviour
سيضع النص البرمجي ReticleBehavior
الشبكة على المستوى السطحي في وسط إطار عرض الجهاز.
- افتح النص البرمجي
ReticleBehaviour.cs
من خلال النقر مرّتين على الحقلScript
. - حدِّد منتصف الشاشة باستخدام كاميرا
ViewToScreenPoint
. عدِّل طريقةUpdate()
لإضافة ما يلي:
var screenCenter = Camera.main.ViewportToScreenPoint(new Vector3(0.5f, 0.5f));
- استخدِم هذه النقطة لإجراء بث شعاعي. أضِف ما يلي:
var hits = new List<ARRaycastHit>();
DrivingSurfaceManager.RaycastManager.Raycast(screenCenter, hits, TrackableType.PlaneWithinBounds);
سيحتوي المتغيّر hits
على عناصر ARRaycastHit
التي تصف النقاط على العناصر القابلة للتتبّع التي تتقاطع مع ray
.
- حدِّد نقطة التقاطع ذات الصلة من خلال طلب البحث في قائمة
hits
. امنح الأولوية للطائرة المُقفَلة المضمّنة فيDrivingSurfaceManager
، وفي حال عدم توفّرها، استخدِم اصطدام الطائرة الأولى. أضِف ما يلي إلى نهايةUpdate()
:
CurrentPlane = null;
ARRaycastHit? hit = null;
if (hits.Length > 0)
{
// If you don't have a locked plane already...
var lockedPlane = DrivingSurfaceManager.LockedPlane;
hit = lockedPlane == null
// ... use the first hit in `hits`.
? hits[0]
// Otherwise use the locked plane, if it's there.
: hits.SingleOrDefault(x => x.trackableId == lockedPlane.trackableId);
}
- إذا كان
hit
يحتوي على نتيجة، انقل تحويلGameObject
هذا إلى موضع النتيجة.
if (hit.HasValue)
{
CurrentPlane = DrivingSurfaceManager.PlaneManager.GetPlane(hit.Value.trackableId);
// Move this reticle to the location of the hit.
transform.position = hit.Value.pose.position;
}
Child.SetActive(CurrentPlane != null);
اختبار الشبكة
- انقر على ملف > إنشاء وتشغيل... لاختبار التغييرات.
- عند توجيه جهازك نحو طائرة، من المفترض أن ترى شبكة الاستهداف تتّبع حركات الكاميرا.
إنشاء سيارة
سيتحكّم اللاعب في سيارة لعبة ستتّجه نحو موقع شبكة الاستهداف. يتم توفير طراز وسلوك لهذه السيارة في "حزمة المبتدئين".
إضافة CarManager
إلى المشهد
- في التسلسل الهرمي، أنشئ
GameObject
جديدًا فارغًا. - إعادة تسميته إلى
Car Spawner
- اختَر العنصر الذي أنشأته. في لوحة التسلسل الهرمي، انقر على إضافة مكوّن لإضافة المكوّن
CarManager
. - يمكنك إعداد العناصر التي تعتمد عليها
CarManager
من خلال النقر على أداة الاختيار لكل حقل:- نموذج سيارة مُعدّ مسبقًا: في مواد العرض، اختَر نموذج سيارة مُعدّ مسبقًا.
- شبكة الاستهداف: في المشهد، اختَر شبكة الاستهداف المُعدّة مسبقًا.
- منصة إدارة مساحة القيادة: في المشهد، اختَر منصة إدارة مساحة القيادة.
يؤدي سلوك CarManager
هذا إلى ظهور سيارة لعبة على الطائرة التي ترتكز عليها الشبكة الشبكية. يمكنك الاطّلاع على النص البرمجي لـ "CarBehaviour
" لمعرفة كيفية برمجة السيارة إذا كنت تريد ذلك.
اختبار القيادة
- انقر على ملف > يمكنك "الإنشاء والتشغيل" لاختبار التغييرات.
- عند النقر على طائرة، يجب أن ترى سيارة صغيرة تظهر في ذلك الموقع. ستتبع هذه السيارة شبكة الاستهداف.
إضافة عنصر اللعبة
بما أنّه يمكن للاعب التحكّم في عنصر في المشهد، يمكنك منح اللاعب وجهة للقيادة إليها.
- أنشئ
GameObject
فارغًا جديدًا في التسلسل الهرمي. - إعادة تسميته إلى
Package Spawner
- اختَر الجسم الذي أنشأته. في لوحة التدرّج الهرمي، انقر على إضافة مكوِّن لإضافة المكوِّن
PackageSpawner
إليه. - يمكنك إعداد العناصر التي تعتمد عليها
PackageSpawner
من خلال النقر على أداة الاختيار لكل حقل:- الإعداد المسبق للحزمة: في مواد العرض، اختَر الإعداد المسبق للحزمة.
- منصة إدارة مساحة القيادة في المشهد، اختَر مدير سطح القيادة.
يؤدي سلوك PackageSpawner
هذا إلى إنشاء حزمة جديدة في موقع جغرافي عشوائي على ARPlane
مُقفَل في حال عدم توفّر طرد حاليًا.
اختبار اللعبة
- انقر على ملف > إنشاء وتشغيل لاختبار التغييرات. 2، بعد إنشاء السيارة، يُفترض أن تظهر الحزمة.
- قيادة السيارة إلى الطرد
- سيظهر لك إعلان جديد في موقع عشوائي.
5. إعداد ميزة تقدير الإضاءة
بعد اكتمال اللعبة الأساسية، أضِف لمسة من الواقعية إلى مشهد الواقع المعزّز. في هذه الخطوة، ستستخدم واجهة برمجة التطبيقات Lighting Estimation API من ARCore لرصد الإضاءة المتوفّرة في العالم الواقعي استنادًا إلى لقطات الكاميرا الواردة. سيتم استخدام هذه المعلومات لتعديل الإضاءة في المشهد لتتلاءم مع الإضاءة في الواقع.
تفعيل ميزة تقدير الإضاءة
- في التسلسل الهرمي، وسِّع مصدر جلسة الواقع المعزّز واختَر عنصر كاميرا الواقع المعزّز.
- في أداة الفحص، وسِّع النص البرمجي لمدير كاميرا الواقع المعزّز.
- غيِّر الحقل تقدير الإضاءة إلى كل شيء.
تعديل الإضاءة الاتجاهية
- في التسلسل الهرمي، اختَر عنصر الإضاءة الاتجاهية.
- أضِف المكوِّن
LightEstimation
إليه. يوفّر هذا المكوّن من "الحزمة المبتدئة" بعض النماذج الأساسية للاشتراك في تغييرات الإضاءة. - في الدالة
FrameReceived()
، أضِف:
ARLightEstimationData lightEstimation = args.lightEstimation;
if (lightEstimation.averageBrightness.HasValue)
Light.intensity = lightEstimation.averageBrightness.Value;
if (lightEstimation.averageColorTemperature.HasValue)
Light.colorTemperature = lightEstimation.averageColorTemperature.Value;
if (lightEstimation.colorCorrection.HasValue)
Light.color = lightEstimation.colorCorrection.Value;
if (lightEstimation.mainLightDirection.HasValue)
Light.transform.rotation = Quaternion.LookRotation(lightEstimation.mainLightDirection.Value);
if (lightEstimation.mainLightColor.HasValue)
Light.color = lightEstimation.mainLightColor.Value;
if (lightEstimation.mainLightIntensityLumens.HasValue)
Light.intensity = lightEstimation.averageMainLightBrightness.Value;
if (lightEstimation.ambientSphericalHarmonics.HasValue)
{
RenderSettings.ambientMode = AmbientMode.Skybox;
RenderSettings.ambientProbe = lightEstimation.ambientSphericalHarmonics.Value;
}
اختبار التغييرات
- انقر على ملف > إنشاء وتشغيل لاختبار التغييرات.
- عند النظر إلى الأجسام في المشهد، قد تلاحظ أنّها ملونة استنادًا إلى الإضاءة في البيئة.
- جرِّب تعديل الإضاءة، إن أمكن. على سبيل المثال، جرِّب إطفاء المصابيح في الغرفة التي أنت فيها. من المفترض أن تلاحظ تغيُّر الإضاءة على الأجسام وفقًا للتغيير في الإضاءة في العالم الواقعي.
6. الخاتمة
تهانينا! لقد وصلت إلى نهاية هذا الدليل التعليمي حول Unity AR Foundation.
المحتوى الذي سبق لك تغطيته
- كيفية إعداد مشروع أساسي باستخدام مؤسسة الواقع المعزّز التابعة لـ Unity وUniversal Rendering Pipeline (مسار العرض العالمي).
- كيفية استخدام
ARPlaneManager
للاشتراك في خطط جديدة - كيفية استخدام
Raycast
للعثور على تقاطعات باستخدام الهندسة الافتراضية. - كيفية استخدام
ARLightEstimationData
لإضاءة المشهد
الخطوات التالية
- اطّلِع على نماذج Unity's AR Foundation.
- تصفَّح مستندات AR Foundation.
- اطّلِع على مستندات Google حول "إضافات ARCore" لـ AR Foundation في Unity.
المهام الإضافية
إذا كنت تريد توسيع نطاق اللعبة التي أنشأتها هنا، إليك بعض الأفكار التي يمكنك تجربتها:
- يمكنك إضافة عدّاد نتائج إلى لعبتك من خلال تعديل
TextMeshPro
عندما تنتج عنPackageManager
حزمة جديدة. - يمكنك الاطّلاع على معلومات الأداء أثناء تشغيل لعبتك من خلال تفعيل "تراكب الأداء".
- استخدِم ميزة Persistent Raycasts لوضع عناصر جديدة في المشهد أولاً. فعند رصد طائرة في تلك المنطقة، سيتم تحديث هذا الجسم لمحاذاة هذه الطائرة.