إنشاء لعبة الفرس بسيطة من نقطة الصفر

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

ما يجب القيام به؟


  1. فكر لماذا وماذا يجب علينا النقر؟
  2. ماذا يجب أن يحدث عندما نقر؟
  3. ماذا يجب أن يحدث إذا لم نضغط؟

كما أجبت على هذه الأسئلة:

  1. يجب علينا النقر فوق أي مكان على الشاشة.
  2. عند النقر فوقها ، يجب أن يتغير الكائن.
  3. إذا تم تجاهلها ، خسارة.

ماذا ستكون اللعبة؟


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

من أين أحصل على مبتدئ لأخذ شبح وخلفية جميلة؟ الجواب: ارسم نفسك.

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

ماذا نحتاج:

  1. السيف
  2. الدرع
  3. الخلفية
  4. فرع بأوراق الشجر

هذا يكفي.

هذه التقنية بسيطة وسأظهر مع مثال السيف:

  1. ارسم محيط
  2. ملء مع الزهور
  3. ارسم الظلال



وهذا كل شيء ، سيفنا جاهز!

ونحن نفعل ذلك أيضا مع الآخرين. لا تشعر بالقلق إذا بدا لك أحد إبداعاتك في البداية بعيدًا عن المثالية ، لأنها ستظهر معًا كرسومات لفان غوخ. مزحة. أو ربما لا.







ستكون الخلفية أكثر تعقيدًا.

ارسم مستطيلًا أخضر واستخدم تدرجًا. يبدو مثل هذا:



يمكننا القول أن الدروس الفنية قد انتهت ونذهب أخيرًا إلى Unity.

بادئ ذي بدء ، دعونا نلقي العفاريت لدينا ، وسحب السيف والدرع في نافذة التسلسل الهرمي ، لأننا سنحتاج إلى إنشاء الجاهزة منها وليس فقط.



  1. أضف Rigidbody 2D وقم بتعيين القيمة على "0" في حقل Gravity Scale بحيث يوضع الدرع في مكان واحد.
  2. أضف Circle Collider 2D وتحقق من خانة الاختيار Is Trigger لتتبع الإجراءات.

باستخدام الإجراءات المسبقة نفسها ، لن تحتاج سوى إلى تعيين القيمة "1" في حقل مقياس الجاذبية بحيث يسقط الدرع. واسحبه إلى مجلد Prefabs. مع السيف نفس العمل. القيام به!

المقبل ، تزيين اللعبة مع العفاريت رسمها في وقت سابق. أول شيء نلقيه هو الخلفية.

  1. فروع الفروع على القمة
  2. إضافة سجل أدناه
  3. ضع جسر في الوسط



سر التصميم الرئيسي هو هذا: سنضع الفروع في الأعلى والأسفل ، وعلى السلم سنقوم بتقليل قيمة الشفافية. لماذا هذا؟

والحقيقة هي أنه بهذه الطريقة نخلق وهم معين من الفضاء. يبدو للاعب أن هناك جسمًا أماميًا وواحدًا خلفيًا وأفقًا. وهذا رائع!

الآن قم بإنشاء زر يشغل الشاشة بأكملها. لإنشاء زر في التسلسل الهرمي ، انقر فوق UI -> زر. التالي:

  1. انقر على اللون.
  2. لقد حددنا القيمة "0" في الحقل "أ" ، وهو المسؤول عن شفافية زرنا.
  3. نتأكد من أن الزر أصبح ما نريد.



بنفس الطريقة نقوم بإنشاء نص لإظهار النتيجة والتسجيل الحاليين.

وأخيرا ، وصلنا إلى البرمجة.

using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.SceneManagement; using UnityEngine.UI; public class MainScript : MonoBehaviour { public GameObject[] prefabs; //  public GameObject[] players; //  public static int score,record,n,k = 0; //, , "n,k" -  public Text scoreT; //   void Start() { score = 0; Time.timeScale = 1; StartCoroutine (PrefabsCreate ()); scoreT = scoreT.GetComponent<Text> (); record = PlayerPrefs.GetInt ("Record"); } void Update() { n = Random.Range (0, prefabs.Length); //    // 0  -  scoreT.text = score + "/" + record; //     if (score >= record) { record = score; PlayerPrefs.SetInt ("Record", record); //   } } IEnumerator PrefabsCreate(){ //    while (true) { Instantiate (prefabs [n], new Vector2 (0, 6.5f), Quaternion.identity); yield return new WaitForSeconds (0.5f); } } public void BtnClick(string btn){ //    if(btn == "Click"){ Time.timeScale = 1; players [k].SetActive (false); //   (, ...) k++; if (k >= prefabs.Length) { k = 0; //  ,  k  -  } players [k].SetActive (true); //   (, ...) } } } 

السيناريو الثاني:

 using System.Collections; using System.Collections.Generic; using UnityEngine; public class PlayerScript : MonoBehaviour { void OnTriggerEnter2D(Collider2D other){//   (, ) //     if (other.gameObject.tag != gameObject.tag) { Time.timeScale = 0; MainScript.score = 0; } else { MainScript.score++; Destroy (other.gameObject);//   } } } 

ما يجري في هذه الأساليب؟

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

تحديث (). تشغيل مرة واحدة لكل إطار. أنها مريحة لكتابة هنا التي يتم تحديثها باستمرار. في حالتنا: مؤشر للنقاط والتسجيل ، قيمة عشوائية تعتمد على ما يتم إنشاؤه - سيف أو درع.

BtnClick (). قد تسأل لماذا هذه الطريقة "عامة"؟ نحن بحاجة إلى أن تنعكس في الوحدة نفسها ، ويمكننا توضيح كلمة "انقر" لتتبع أي زر نضغط عليه ، على الرغم من وجود زر واحد فقط ، لن يضر أي شخص بمعرفة المزيد.



نكتب هنا ما يجب أن يحدث بعد النقر على الزر. عند الضغط عليه ، يجب أن يتغير من السيف إلى الدرع والعكس بالعكس ، قم بتعيين القيمة الزمنية على "1" ، لأنه عند إعادة تعيينها إلى الصفر.

OnTriggerEnter2D (). يتحقق من اصطدام كائن. إذا تطابقت علامات كلا الجسمين ، فستتم زيادة النتيجة بواحد ، ويتم إتلاف الجاهزة. إذا كانت العلامات مختلفة ، فسيتوقف الوقت الضائع ويتم إعادة تعيين النتيجة.

يبقى لإضافة هذه العلامات نفسها. وهنا الأمر بسيط للغاية:

  1. في نافذة المفتش ، انقر فوق علامة.
  2. في القائمة المنسدلة في أسفل الصفحة ، انقر فوق "إضافة علامة".
  3. انقر فوق علامة الجمع واسم العلامة كما نريد.



بعد الإنشاء ، انقر أيضًا على علامة وحدد الرمز المرغوب.

يبقى نقل البرامج النصية إلى الكائنات الضرورية وتعبئة بعض الحقول. قم بإنشاء كائن فارغ وإضافة البرنامج النصي "Main Script" ، وإضافة "Script Player" إلى سيفنا ودرعنا.



بكل ثقة ، أستطيع أن أقول إن اللعبة جاهزة. نطلق ونستمتع بإبداعنا الأول.



كل التوفيق ونتمنى لك التوفيق في gamedev!

Source: https://habr.com/ru/post/ar470103/


All Articles