كيفية إنشاء لعبة Android أساسية باستخدام Unity

في هذا البرنامج التعليمي المماثل ، سنستعرض كيفية إنشاء أساسيات ذكري المظهر لعبة باستخدام الوحدة.



المتطلبات:

  • وحدة
  • محرر نصوص جيد مثل NotePad ++ (اختياري لكن موصى به)
  • أندرويد سك
إذا لم يكن لديك بالفعل ، فيجب أن تبدأ بتنزيل وتثبيت Unity SDK وكذلك Android SDK. نحتاج إلى Android SDK حتى نتمكن من اختبار APK للعبة داخل بيئة Android.

شغّل Unity وأنشئ مشروعًا جديدًا. اجعله مشروعًا ثنائي الأبعاد.



هناك العديد من اللوحات للتعرف عليها - لوحة التدرج الهرمي التي ستحتوي على جميع عناصر المشهد (المشهد = أيًا كان 'المستوى' الذي تعمل عليه حاليًا). ثم هناك علامة تبويب اللعبة التي تُستخدم لتشغيل / اختبار لعبتك أثناء وجودك داخل المحرر ، وعلى اليمين لديك لوحة المفتش حيث يمكنك تعديل أشياء مختلفة مثل الإضاءة والفيزياء وما إلى ذلك.



أول شيء نريد القيام به هو إنشاء كائن - ستكون هذه هي الشخصية الرئيسية لدينا (التي نتحكم فيها). يمكنك إما رسم الكائن الخاص بك ، مثل رسم مربع بالعيون فقط ، أو يمكنك الحصول على كائن من الإنترنت - فقط تأكد من أنه ملف .PNG (خلفية شفافة).



اسحب الكائن وأفلته في نافذة المشهد الرئيسية (أكبر نافذة) - سيظهر أيضًا في لوحة Hierarchy على اليسار.

لذلك سننشئ الآن بعض الأنظمة الأساسية - يمكن أن تكون مربعات بسيطة ، لأننا سنتمكن من تغيير حجمها بسهولة لإنشاء جدران ومنصات أخرى.

لذا ، قم فقط بإنشاء 'كائن' مربع جديد ثم اسحبه وأفلته في نافذة المشهد كما فعلت مع شخصية العفريت.



نحتاج الآن إلى توجيه Unity لإعطاء الفيزياء لشخصيتنا الرئيسية - انقر على شخصية الرموز الرئيسية (يجب تمييزها باللون الأزرق في نافذة المشهد) ، ثم في لوحة المفتش ، ابحث عن 'GameObjects'.

انقر فوق 'إضافة مكون> فيزياء 2D> RigidBody2D'. سيؤدي هذا تلقائيًا إلى إضافة الفيزياء إلى الكائن الخاص بك ، والتي كنت ستضطر إلى كتابتها بنفسك في SDK آخر.

نريد منع شخصية الكائن الرئيسي من الدوران خارج نطاق السيطرة - لذا ابحث عن علامة التبويب 'قيود' في لوحة المفتش (مع استمرار تمييز الكائن الرئيسي في نافذة المشهد) ، وحدد المربع 'تجميد الدوران Z'.

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

نريد أيضًا أن نصلح اتجاهنا لمنع الشخصية من الدوران والتحرك بحرية. ابحث عن 'قيود' في المفتش مع تحديد اللاعب وحدد المربع لتجميد الدوران Z. الآن انقر فوق 'تشغيل' مرة أخرى وستجد أن لاعبك يسقط الآن من السماء إلى هلاكه اللامتناهي

من أجل منع شخصية الرموز الرئيسية لدينا من السقوط إلى ما لا نهاية ، سنحتاج إلى إضافة مصادم. هذا هو في الأساس مجرد مخطط تفصيلي للشكل الذي سنضيفه إلى شخصية العفريت الرئيسية. قم بتمييز شخصيتك الرئيسية ، انقر فوق 'إضافة مكون> فيزياء 2D> BoxCollider2D.

افعل الآن نفس الشيء بالضبط مع النظام الأساسي الذي أنشأته سابقًا. يجب أن 'تتصادم' الشخصية الرئيسية الخاصة بك الآن مع النظام الأساسي وتبقى هناك.

لذا نريد الآن التأكد من أن الكاميرا ستتبع شخصيتك الرئيسية - داخل المشهد ، يجب أن يكون هناك بالفعل كائن كاميرا. تريد سحب هذا في قمة ال الشخصية الرئيسية للعفريت.

هذا مهم بشكل خاص إذا كنت تقوم بإنشاء ملف عداء قائم على 3D ، شيء مثل ميل حيث تحتاج إلى أن تظل الكاميرا خلف كائن اللعبة الأساسي (شخصية العفريت الرئيسية).

انتقل الآن إلى لوحة Hierarchy وفي قائمة GameObjects ، تريد سحب الكاميرا تحته شخصية العفريت الرئيسية (Player GameObject). سيؤدي هذا إلى جعل حرف الكائن الرئيسي ' الأبوين' من الكاميرا. لذلك عندما يتحرك Player GameObject حول الشاشة ، يجب أن تتبع الكاميرا.

لذلك بالنسبة لهذا البرنامج التعليمي للعبة ، سنقوم فقط بإنشاء لعبة أساسية من نوع عداء لا نهاية له ، شيء مثل تشغيل 3 ، حيث ستركض شخصيتك الرئيسية عبر الشاشة وتتفادى العقبات (أو 'تنتهي اللعبة' إذا واجهت عقبة '. سيستغرق ذلك بعض النصوص ، سيتم توفير معظمها في هذا الدليل.

انقر بزر الماوس الأيمن على مجلد 'الأصول' وأنشئ مجلدًا جديدًا - قم بتسميته نصوص . الآن انقر بزر الماوس الأيمن على هذا المجلد الجديد واضغط على 'إنشاء> C # Script' وقم بتسميته PlayerControls . سيحدد هذا البرنامج النصي سلوك شخصية الرموز الرئيسية لدينا.

عندما تنقر مرتين على هذا البرنامج النصي الجديد ، فإنه ينبغي فتح في Visual Studio - بدلاً من ذلك (وتفضيلي الشخصي) ، يمكنك تحريره في شيء مثل NotePad ++.

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

فوق بداية السطر باطل ():

عامة Rigidbody2D rb;

الجزء التالي من الكود الذي نحتاج إلى إضافته سيكون ضمن Start () ، ويتم استخدامه للعثور على الجسم الصلب - بشكل أساسي ، نوجه Unity لتحديد الفيزياء التي نعلقها على GameObjects (شخصية الرموز الرئيسية لدينا) ، و Start () سيتم تنفيذه عند إنشاء كائن أو نص جديد.

بعد ذلك ، حدد موقع كائن الفيزياء.

rb = GetComponent< صلب 2D > () ؛

وسوف تضيف هذا السطر داخل التحديث ()

rb.velocity = جديد Vector2 (3، rb.velocity.y) ؛

ما يقوم به Update () هو التحديث باستمرار ، لذا فإن أي كود مضاف هناك سيعمل باستمرار (ما لم يتم إتلاف الكائن). ما فعلناه هو إرشاد النص إلى أننا نريد أن يكون للجسم الصلب متجه جديد باستخدام نفس السرعة على المحور Y (rb.velocity.y) ، ولكن بسرعة 3 على المحور الأفقي. في المستقبل ، يمكنك أيضًا استخدام ' FixedUpdate () ’ وهو مشابه ولكنه مختلف ، لأنه يمكنك التحكم في مقدار التحديث / التحديث للبرنامج النصي.

احفظ البرنامج النصي وارجع إلى Unity ، ثم انقر فوق حرف الرمز الرئيسي لتمييزه. في لوحة المفتش ، انتقل إلى Add Component> Scripts وأضف البرنامج النصي الذي حفظناه للتو. الآن عند النقر فوق الزر 'تشغيل' ، يجب أن تتحرك الشخصية الرئيسية باستمرار نحو حافة النظام الأساسي.

إنشاء عناصر تحكم إدخال اللاعب

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

أعد فتح النص البرمجي من قبل ، وسنضيف هذا الرمز الإضافي:

 إذا (Input.GetMouseButtonDown (0)) {rb.velocity = جديد Vector2 (rb.velocity.x، 5) ؛ }

ستضع ذلك داخل طريقة Update () ، وما تفعله بشكل أساسي هو إخبار Unity أنه عندما ينقر اللاعب على زر الماوس الخاص به (والذي سيتم ترجمته على شكل شاشة نقرة على Android) ، فإن شخصية العفريت الرئيسية 'ستقفز' ' في الهواء. هذا لأننا أضفنا سرعة على المحور Y بقيمة 5 (القيمة الأعلى تعني قفزة أعلى بالطبع).

إذا لم تكن معتادًا على الترميز ، فقد استخدمنا إذا بيان بسبب إذا هو في الأساس نوع من التعليمات 'افعل أو لا تفعل' - إنها قول حرفي إذا حدث هذا ، فقم بهذا الأمر . لذلك إذا كان اللاعب لا ينقر فوق الماوس (أو ينقر على شاشة Android) فمن الواضح أن النص لن يعمل.

انطلق وانقر على الزر 'تشغيل' وتأكد من أنه يعمل بشكل صحيح قبل المتابعة.

بعد ذلك ، سنضيف عقباتنا (التي يمكن أن 'تدمر' كائن الشخصية الرئيسية) ، ونقاط اللعبة ، وقائمة 'انتهت اللعبة'.

إذا اختبرت اللعبة حتى الآن ، فإن المشكلة الوحيدة التي نواجهها حتى الآن هي أن الضغط على زر 'القفز' الذي أنشأناه سيؤدي إلى القفز على الشخصية بغض النظر عما إذا كانت مثبتة على الأرض أم لا - هذا في الأساس هو Flappy Birds ، وليس عداءً مثل نحن نريد. لكننا سنصلح ذلك.

في البرنامج النصي ، أضف هذا الجزء من التعليمات البرمجية في الاعلى طريقة التحديث ():

 عامة تحويل GroundCheck ؛ عامة تحويل البداية عامة   تطفو groundCheckRadius. عامة LayerMask whatIsGround ؛ نشر   منطقي على الأرض؛ ثم أضف هذا السطر التالي إلى طريقة التحديث أعلاه إذا البيان: onGround = Physics2D.OverlapCircle (groundCheck.position، groundCheckRadius، whatIsGround) ؛ وبعد ذلك ستغير هذا السطر التالي ليشمل '&& onGround' إذا (Input.GetMouseButtonDown (0) && onGround) {لذلك يجب أن يبدو البرنامج النصي بالكامل كما يلي: عامة   صف دراسي   PlayerControls : سلوك أحادي { عامة Rigidbody2D rb; عامة تحويل GroundCheck ؛ عامة تحويل البداية عامة   تطفو groundCheckRadius. عامة LayerMask whatIsGround ؛ نشر   منطقي على الأرض؛ باطل   بداية () { rb = GetComponent(); } باطل   تحديث () {rb.velocity = جديد Vector2 (3، rb.velocity.y) ؛ onGround = Physics2D.OverlapCircle (groundCheck.position، groundCheckRadius، whatIsGround) ؛ إذا (Input.GetMouseButtonDown (0) && onGround) {rb.velocity = جديد Vector2 (rb.velocity.x، 5) ؛ }}}

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

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

الآن انقر بزر الماوس الأيمن على التسلسل الهرمي وأنشئ كائنًا فارغًا جديدًا ، واسحبه بحيث يكون أسفل كائن الشخصية الرئيسية في نافذة المشهد الرئيسية - ضع هذا الكائن الفارغ حيث نريد اكتشاف الأرضية. أعد تسمية الكائن إلى 'Check Ground' ، ثم اسحبه أسفل كائن لعبة اللاعب كما فعلنا سابقًا بالكاميرا (لإنشاء علاقة أب - طفل بين الكائنات). الآن سيتبع الكائن الفارغ كائن الشخصية الرئيسية ، تمامًا مثل الكاميرا ، وسيتحقق باستمرار من مسافة الكاميرا

حدد الآن الكائن الرئيسي للشخصية وانتقل إلى لوحة المفتش - اسحب كائن Check Ground إلى المساحة التي تسمى 'groundCheck'. يجب أن يكون موضع 'التحويل' مساويًا لموضع هذا الكائن الجديد ، وحيث يقول 'Radius' ، اجعله 0.1.

نحن بحاجة إلى تحديد الطبقة الأرضية. ما عليك سوى تحديد التضاريس الأرضية وفي المفتش ، ابحث عن الزر 'Layer: Default' (إنه مربع قائمة منسدلة) واختر 'Add Layer'.

حدد الآن 'ground' كطبقة لمنصتنا ، وكرر هذا مع أي منصات أخرى في نافذة اللعبة. حيث تقول 'What is Ground' على كائن الكائن الرئيسي الخاص بنا ، حدد أيضًا الطبقة الأرضية.

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

انتهت اللعبة على قائمة التصادم واللعبة

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

ما تريده في الأساس هو:

  1. أضف لاعب كائن وتعيين جسم متماسك و أ مصادم من اختيارك لها.
  2. إضافة العدو كائن وتعيين جسم متماسك و أ مصادم من اختيارك لها. (والاختياري ، أضف علامة 'العدو' إليها)
  3. إنشاء ملف نص C # وإضافته كمكون إلى لاعب (أو استخدم أي برنامج نصي مرفق بالمشغل ، لا داعي لإنشاء نص جديد إذا كان لديك بالفعل)
  4. أضف هذا في البرنامج النصي الخاص بك:
باطل OnCollisionEnter ( تصادم تجميع) { تصحيح . سجل ('تصادم') ؛ // تحقق لمعرفة ما إذا كان يسجل تصادمًا ، إذا كان يعمل ، يمكنك إزالة هذا الخط إذا كان (coll.gameobject. بطاقة شعار == 'العدو') { // يرى ما إذا كان الكائن الذي اصطدم به لاعبك يحمل علامة تسمى 'العدو