
هذا الكتاب موجه لكل من يريد إنشاء ألعاب ، ولكن ليس لديه خبرة تطوير سابقة. يدعم Unity العديد من لغات البرمجة. في هذا الكتاب ، سنستخدم C #. قبل البدء في إنشاء الألعاب ، تحتاج إلى فهم أساسيات تصميمها ، بالإضافة إلى محرك لعبة Unity نفسه ، لذلك في الجزء الأول من الكتاب سندرس هذه المشكلات. في الجزئين الثاني والثالث ، سننظر في عملية إنشاء ألعاب ثنائية الأبعاد وثلاثية الأبعاد ، على التوالي ، وفي الجزء الرابع سنتحدث عن ميزات Unity الأخرى ، التي تفيدك معرفتها.
6. تنفيذ اللعب مع الفخاخ والأهداف
الفخاخ البسيطةتتكون معظم هذه اللعبة من التعامل مع لمسات الأشياء المختلفة - الفخاخ ، الكنوز ، نقاط الخروج ، إلخ. بالنظر إلى مدى أهمية تحديد وقت لمس كائنات معينة ، سننشئ نصًا برمجيًا مشتركًا ينشئ حدثًا للوحدة عندما يلمسها أي كائن يحمل علامة "المشغل". سيتم بعد ذلك تكوين هذا الحدث بشكل مختلف لكائنات مختلفة: ستقوم الفخاخ بإبلاغ مدير اللعبة أن جنوم قد تلقى تلفًا ، وسوف يبلغ الكنز أن جنوم قد التقط الكنز ، ونقطة الخروج هي أن جنوم قد وصل إلى المخرج.
الآن قم بإنشاء برنامج نصي C # جديد في ملف يسمى SignalOnTouch.cs وإضافة التعليمات البرمجية التالية إليه:
using UnityEngine.Events; // UnityEvent, "Player" // . [RequireComponent (typeof(Collider2D))] public class SignalOnTouch : MonoBehaviour { // UnityEvent . // . public UnityEvent onTouch; // true, AudioSource. public bool playAudioOnTouch = true; // , // SendSignal. void OnTriggerEnter2D(Collider2D collider) { SendSignal (collider.gameObject); } // , // SendSignal. void OnCollisionEnter2D(Collision2D collision) { SendSignal (collision.gameObject); } // "Player" // UnityEvent, . void SendSignal(GameObject objectThatHit) { // "Player"? if (objectThatHit.CompareTag("Player")) { // , if (playAudioOnTouch) { var audio = GetComponent<AudioSource>(); // // , // if (audio && audio.gameObject.activeInHierarchy) audio.Play(); } // onTouch.Invoke(); } } }
أساس فئة SignalOnTouch هو أسلوب SendSignal ، والذي يتم استدعاؤه بواسطة أساليب OnCollisionEnter2D و OnTriggerEnter2D. يتم استدعاء الطريقتين الأخيرتين بواسطة محرك الوحدة عندما يلمس الكائن المصادم أو عندما يقع الكائن ضمن نطاق الزناد. تتحقق طريقة SendSignal من علامة الكائن ، وإذا قامت بتخزين السلسلة "Player" ، فإنها تنشئ حدث Unity.
الآن بعد أن أصبح لديك فئة SignalOnTouch ، يمكنك إضافة الفخ الأول.
1. استيراد النقوش المتحركة من الكائنات. استيراد محتويات المجلد Sprites / Objects إلى المشروع.
2. أضف المسامير البنية. ابحث عن SpikesBrown العفريت واسحبها إلى المشهد.
3. إعداد الكائن مع المسامير. إضافة مكونات PolygonCollider2D و SignalOnTouch إلى الكائن المسنن.
أضف وظيفة جديدة إلى حدث SignalOnTouch. اسحب مدير اللعبة إلى حقل الكائن وحدد وظيفة GameManager.TrapTouched ، كما هو موضح في الشكل. 6.1.
4. تحويل الكائن المشنوق إلى قالب. اسحب كائن SpikesBrown من لوحة Hierarchy إلى مجلد Level. ونتيجة لذلك ، سيتم إنشاء قالب يمكنك من خلاله إنشاء عدة نسخ من الكائن.
5. اختباره. ابدأ اللعبة. اجعل القزم يضرب المسامير. يجب أن يسقط هذا القزم ويعاود الظهور!
الكنز والخروج
بعد إضافة الفخ الذي يقتل القزم بنجاح ، حان الوقت لإضافة الفرصة للفوز باللعبة. للقيام بذلك ، أضف عنصرين جديدين: كنز ونقطة خروج.
الكنز هو نقش متحرك في أسفل بئر يكتشف لمسة جنوم ويرسل إشارة إلى مدير اللعبة. عندما يحدث هذا ، يخبر مدير اللعبة القزم أنه أمسك الكنز ، وبعد ذلك يتم استبدال العفريت مع صورة اليد الفارغة للقنوم بالعفريت مع صورة اليد التي تحمل الكنز.
نقطة الخروج هي نقش متحرك آخر يقع في الجزء العلوي من البئر. مثل الكنز ، يكتشف لمسة جنوم ويخطر مدير اللعبة بذلك. إذا كان القزم في هذه اللحظة يحمل الكنز ، يتم منح اللاعب الفوز في اللعبة.
يتم تنفيذ العمل الرئيسي في هذين الجسمين بواسطة مكون SignalOnTouch - عندما يصل gnome إلى نقطة الخروج ، يجب استدعاء طريقة ExitReached لمدير اللعبة ، وعندما يلمس gnome الكنز ، يجب استدعاء طريقة TreasureCollected.
لنبدأ بإنشاء نقطة خروج ، ثم نضيف كنزًا.
إنشاء نقطة خروج
بادئ ذي بدء ، نستورد العفاريت.
1. استيراد خلفية مستوى sprites. انسخ مجلد Sprites / Background من الحزمة التي تم تنزيلها بالموارد إلى مجلد Sprites للمشروع.
2. إضافة العفريت الأعلى. ضعه أسفل كائن الحبل. سيكون هذا العفريت بمثابة نقطة خروج.
3. إعداد العفريت. أضف مكون Box Collider 2D إلى العفريت وتحقق من مربع Trigger. انقر فوق الزر Edit Collider وقم بتغيير حجم المصادم بحيث يكون قصيرًا وعريضًا ، كما هو موضح في الشكل. 6.2.
4. تكوين إرسال إشارة إلى مدير اللعبة في لحظة لمس العفريت. إضافة مكون SignalOnTouch إلى العفريت. أضف عنصرًا إلى قائمة أحداث المكوِّن واربطه بمدير الألعاب. حدد الوظيفة GameManager.ExitReached. الآن لمس جنوم الخروج سيستدعي طريقة ExitReached لمدير اللعبة.
الآن أضف الكنز.
يعمل الكنز على هذا النحو: بشكل افتراضي ، يعرض كائن الكنز نقشًا متحركًا مع صورة الكنز. عندما يلمسها القزم ، يتم استدعاء طريقة TreasureCollected لمدير اللعبة ويتم عرض نقش متحرك آخر بدلاً من الكنز ، مما يدل على أنه تم التقاط الكنز. عندما يموت القزم ، يعود كائن الكنز إلى حالته الأصلية ويعرض النقش المتحرك مع صورة الكنز مرة أخرى.
نظرًا لأن تغيير العفاريت في اللعبة سيتم إجراؤه في كثير من الأحيان - سترى هذا عندما سنقوم بتحسين الرسومات - فمن المنطقي إنشاء فئة عالمية لتغيير العفاريت واستخدامها في كائن الكنز.
إنشاء برنامج نصي C # جديد يسمى SpriteSwapper.cs. أضف الكود التالي إليها:
// . , // ' ' ' '. public class SpriteSwapper : MonoBehaviour { // , . public Sprite spriteToUse; // , // . public SpriteRenderer spriteRenderer; // . ResetSprite. private Sprite originalSprite; // . public void SwapSprite() { // ... if (spriteToUse != spriteRenderer.sprite) { // originalSprite originalSprite = spriteRenderer.sprite; // . spriteRenderer.sprite = spriteToUse; } } // . public void ResetSprite() { // ... if (originalSprite != null) { // ... . spriteRenderer.sprite = originalSprite; } } }
تم تصميم فئة SpriteSwapper لعمليتين: عندما يتم استدعاء أسلوب SwapSprite ، يتم تمرير Sprite آخر إلى متخيل SpriteRenderer المتصل بكائن اللعبة للعرض. في هذه الحالة ، يتم تخزين العفريت الأصلي في متغير. عندما يتم استدعاء أسلوب ResetSprite ، يتم إرسال المتصور إلى العفريت الأصلي لعرضه.
يمكنك الآن إنشاء كائن الكنز وتخصيصه.
1. إضافة نقش متحرك بصورة الكنز. ابحث عن العفريت TreasurePresent وأضفه إلى المشهد. ضعه بالقرب من القاع ، ولكن بطريقة تمكن القزم من الحصول عليه.
2. إضافة مصادم للكنز. حدد العفريت مع صورة الكنز وأضف مكون Box Collider 2D إليه. حدد المربع "مشغل".
3. إضافة وتكوين برنامج نصي لتغيير العفريت. إضافة مكون SpriteSwapper. اسحب العفريت مع صورة الكنز في حقل العفريت من هذا المكون. ثم ابحث عن TreasureAbsent sprite واسحبها إلى حقل Sprite To Use لمبدل sprite.
4. إضافة وتكوين مكون إرسال الإشارة استجابة للنقرة. أضف مكون SignalOnTouch. أضف عنصرين إلى قائمة On Touch:
- الرابط الأول لكائن Game Manager وحدد طريقة GameManager.TreasureCollected ؛
- قم بإقران الثانية مع العفريت الكنز (أي مع الكائن الذي تقوم بإعداده حاليًا) وحدد طريقة SpriteSwapper.SwapSprite.
5. إضافة وتكوين مكون إعادة التعيين. أضف مكونًا يمكن إعادة تعيينه إلى الكائن. أضف عنصرًا واحدًا إلى قائمة On Touch ، وحدد طريقة SpriteSwapper.ResetSprite ، واربطها بكائن الكنز.
نتيجة لذلك ، يجب أن تبدو الإعدادات في لوحة المفتش كما هو موضح في الشكل. 6.3.
6. اختبار اللعبة. ابدأ اللعبة والمس الكنز. في تلك اللحظة ، يختفي الكنز. إذا مات الجنوم بعد ذلك ، فإن الكنز سيعاود الظهور في مكانه بعد إنشاء القزم الجديد.
مضيفا الخلفية
حاليًا ، تجري اللعبة على خلفية زرقاء باهتة تم تعيينها افتراضيًا في Unity. في هذا القسم ، سنضيف خلفية مؤقتة ، والتي سنستبدلها بعفريت خلفية عندما نبدأ في تحسين التصميم الجرافيكي للعبة.
1. إضافة مستطيل خلفية. افتح قائمة GameObject وحدد 3D ObjectQuad (3D ObjectRectangle). اسم خلفية الكائن الجديد.
2. انقل الخلفية إلى الخلفية. لتجنب الموقف عندما يتم رسم خلفية مستطيلة أعلى نقوش اللعبة ، انقلها إلى الخلفية بعيدًا عن الكاميرا. للقيام بذلك ، قم بتعيين الإحداثيات Z للمستطيل إلى 10.
3. تعيين عرض وارتفاع مستطيل الخلفية. قم بتشغيل أداة Rect بالضغط على المفتاح T ، ثم استخدم المقابض لتعيين أبعاد المستطيل. يجب أن يكون الحد العلوي للخلفية في نفس المستوى مع العفريت في أعلى المشهد ، والجزء السفلي مع الكنز (الشكل 6.4).
4. اختبر اللعبة. بعد البدء ، يجب أن تتحول خلفية الملعب إلى اللون الرمادي الداكن.
»يمكن العثور على مزيد من المعلومات حول الكتاب على
موقع الناشر على الويب»
المحتويات»
مقتطفاتقسيمة خصم 20٪ للمتجولين -
الوحدة