استمرارًا للمقال الأول (
إنه هنا ) ، أواصل تطوير منهاج استنادًا إلى
مقال "أنماط تصميم المستوى للألعاب ثنائية الأبعاد" .
بعد إصدار المقال الأول ، تقرر بشكل لا لبس فيه أن عنصر التحكم في الزر الذي تم وصفه فيه لم يكن مناسبًا تمامًا. لذلك ، تم إعادة ضبط عناصر التحكم في اللعبة على عصا التحكم. علاوة على ذلك ، لسوء الحظ ، لم تمر اللعبة بالاعتدال في السوق. تلقيت يوم الجمعة الماضي إخطارًا بأن المشروع قد تم رفضه بسبب جمع البيانات الوصفية. بالمناسبة ، تم رفض أول منصة لعب "Knight Kadavar" لأول مرة أيضًا بسبب طلب مزعوم للحصول على إذن لإدارة المكالمات وعرض الرسائل القصيرة (التي كانت غباءًا مطلقًا من جانب روبوتهم. اللعبة لم تتطلب أي أذونات). ثم طلبت Google مني إشعارًا مكتوبًا عن سبب حاجتي إليه. ولكن ، انتهى الأمر بحقيقة أنني قمت بإصلاح عدة أخطاء لاحظتها وأرسلت اللعبة لإعادة الاعتدال. تم إضافتها بنجاح إلى السوق. الآن ، أخطط للقيام بنفس الشيء مع هذه اللعبة.
لذلك ، بمجرد إنشاء المشهد الثاني ، تم إغلاق النموذج تلقائيًا
مشهد
جزء من المستوى / العالم على أساس مفهوم عادة ما يكون صعوبة في التغلب عليها.
علاوة
عنصر قابل للتحصيل له تأثير إيجابي على اللاعبين
نحن ندرك نوعين من مكافآت Lucas:
- مجموعة الإسعافات الأولية التي سوف تسقط عند تدمير الوحوش
- الصناديق ذات السيوف التي سيكون لوكاس قادرًا على رميها على الأعداء
لتطبيق مكافأة مع مجموعة الإسعافات الأولية ، يجب عليك تعديل الجاهزة مع الوحوش. بشكل أكثر تحديدًا ، حدد المكان الذي ستظهر منه المكافآت.

ثم قم بتعديل البرنامج النصي Enemy.cs:
المفسد العنوان [SerializeField] private GameObject bonusPref;
نحن ندعو وظيفة مع نوع عاد الأضرار (0) والتحقق من صحة Health 0. إذا كان الأمر كذلك ، فإننا ندعو مولد الأرقام العشوائية. إذا توقف المولد عن طريق اختيار الرقم 0 ، فإننا نرمي اللاعب على المكافأة ونحطم الوحش.
بعد ذلك ، نصف ما يمكنك فعله بهذه المكافأة. للقيام بذلك ، قم بإنشاء الجاهزة مع المكونات SpriteRenderer ، BoxCollider2D و Rigidbody2D. أيضًا ، قم بإنشاء برنامج نصي يكون مسؤولاً عما يجب القيام به في حالة تصادم التفاح مع اللاعب:
المفسد العنوان public void OnTriggerEnter2D(Collider2D collision) { switch (collision.gameObject.tag) { case "Player": { HeroScript.Health = 100; Destroy(this.gameObject); } break; } }
عرض
معاينة الفيديو .
بعد ذلك ، ندرك مكافأة فقدان السيوف. يمكن تنفيذه وفقًا لنفس المبدأ كما في الجزء الأول ، تم تنفيذ فقد السجل. الجزء المثير للاهتمام هو أنه عندما يلتقط Lucas السيوف ، يجب إلقاؤه فقط في نطاق رؤية المعارضين ، وليس عندما يجمع Lucas السجلات. في الواقع ، في النموذج الذي تم فيه تطبيق زر تجميع العناصر / الهجوم الآن ، فستفعل ذلك تمامًا. تم طرح السيوف في أي وضع. للقيام بذلك ، نقوم بتعديل رمز البرنامج النصي الهجوم / المجموعة:
المفسد العنوان [SerializeField] private GameObject swordPref;
ماذا تعني سطور التعليمات البرمجية هذه؟ أولاً ، نحدد مجموعة من المصادمات ونتحقق من كل شيء وقع في المكعب الخاص بنا:
Collider2D[] ED = Physics2D.OverlapBoxAll(Hero.position, new Vector2(attackInBoxX, attackInBoxY), lEnemy);
انتبه إلى المعلمات التي تم تمريرها ، فهي مختلفة تمامًا عن تلك المستخدمة في OvelapCircleAll. المعلمات الرئيسية -
Vector2(attackInBoxX, attackInBoxY)
بعد ذلك يتم استيفاء الشرط ، إذا كان صفيف المصادم أكبر من 0 ، فإننا نتحقق من مخزون السيوف. إذا كان عدد السيوف يساوي 0 ، فلن نفعل شيئًا وننفذ الطريقة
ED[i].GetComponent<Enemy>().Damage(1);
كما لو كانت ضربة عادية. إذا كان أكبر من 0 ، ثم حرر السيف وتقليل عدد السيوف بمقدار 1.
بعد ذلك ، تنفيذ أسلوب instantiateSword () ؛
المفسد العنوان private void instantiateSword() { GameObject newArrow = Instantiate(swordPref) as GameObject; newArrow.transform.position = instSword.transform.position; Rigidbody2D rb = newArrow.GetComponent<Rigidbody2D>(); if (GameObject.Find("Hero").GetComponent<HeroScript>().localScale.x > 0) { rb.velocity = new Vector3(swordSpeed, 0, 0); } else { rb.velocity = new Vector3(-swordSpeed, 0, 0); newArrow.transform.Rotate(0,0,-180); } }
إذا كنت قد قرأت المقال السابق جيدًا ، فقد تكون لاحظت أن هذا الرمز يشبه قسمًا من التعليمات البرمجية المسؤولة عن إطلاق عباد الشمس. أسطر مضافة إلى هذا القسم من التعليمات البرمجية المسؤولة عن تحديد مقياس Lucas. أي أنه يبدو يسارًا أو يمينًا:
(GameObject.Find("Hero").GetComponent<HeroScript>().localScale.x > 0)
إذا لوكاس يتطلع إلى اليسار ، ثم
rb.velocity = new Vector3(-swordSpeed, 0, 0); newArrow.transform.Rotate(0,0,-180);
يطير السيف إلى اليسار ويديره أيضًا 180 درجة.
عرض
معاينة الفيديو .
بتنفيذ هذا الإجراء ، أغلقنا تلقائيًا نمطًا واحدًا آخر:
موضوع
أي كيان يظهر في مشهد اللعبة ويكون قادرًا على تغيير حالته. تشمل الكائنات الأخطار والأعداء والمكافآت ، إلخ.على الرغم من أنه على الأرجح ، تم تنفيذ هذا النمط في وقت مبكر عندما تمت برمجة الوحش الأول.
نتيجة لذلك ، في الوقت الحالي ، لم يتم تنفيذ 3 أنماط:
- منطقة غير قابلة للوصول
- الميكانيكا
- الرئيس
الميكانيكا في هذه اللحظة هي ذات أهمية كبيرة بالنسبة لي. لأنني لا أستطيع أن أخبر نفسي أنني أفهم بالضبط ما وضعه مختلف الأشخاص في هذا التعريف.
علاوة على ذلك ،
منطقة غير قابلة للوصول . في هذه المشكلة ، سوف أتعامل مع بعض الوقت في مسائل تصميم المستوى. أولاً ، لأنني أريد أن أجعل المستوى الثالث مظلمًا. على الأرجح كهف أو زنزانة. مع القدرة على تحقيق تأثيرات الإضاءة.
مدرب ! وسوف تظل أيضا الكرز على الكعكة. أريد أن أجعلها مستقلة بقدر الإمكان مع إمكانية تغيير مظهري.
الجزء الأول من
المقالتم أخذ جميع كائنات اللعبة من
https://opengameart.org/ ، وهي:
لا تتردد وكتابة تعليقات على Habré أو لي في worldofonehero@gmail.com.
شكرا لقراءتك ، حظا سعيدا.