سكربت واحد يدير اللعبة
جزء من قسم إنشاء ألعاب حقيقية في رحلة Unity على Coddy. الدرس 12 من 60.
ضع النتيجة في سكربت اللاعب، والأرواح في سكربت الصحة، والتحقق من انتهاء اللعبة في سكربت ثالث، وبما أن كل سكربت يحتاج إلى أرقام السكربتات الأخرى، فإن كل قاعدة جديدة تمس عدة ملفات. عادةً ما تضع ألعاب Unity هذه الأرقام في سكربت واحد، وهو GameManager، على كائن GameObject فارغ خاص به. فهو يدير النتيجة والأرواح والقاعدة التي تنهي اللعبة. أما السكربتات الأخرى فتكتفي بالإبلاغ عما حدث، وذلك باستدعاء أساليبه العامة. في ركلات الترجيح هذه، تبلغ الشبكة عن كل هدف:
public class GameManager : MonoBehaviour
{
private int goals;
private int shotsLeft = 5;
public void ShotTaken(bool scored)
{
if (shotsLeft == 0) return;
shotsLeft--;
if (scored) goals++;
Debug.Log("Goals: " + goals + ", shots left: " + shotsLeft);
if (shotsLeft == 0) Debug.Log("Full time: " + goals + " goals");
}
}// Net.cs، عند مُشغِّل المرمى
public GameManager game;
void OnTriggerEnter(Collider other)
{
if (other.CompareTag("Ball")) game.ShotTaken(true);
}لا تعرف الشبكة عدد التسديدات المتبقية أو موعد انتهاء المباراة. إنها تبلغ عن الهدف، ويقرر المدير ما يعنيه ذلك؛ ويبلغ سكربت حارس المرمى عن تصدٍّ باستخدام game.ShotTaken(false). لإجراء ركلات ترجيح من 3 تسديدات، غيّر رقمًا واحدًا في سكربت واحد. يمنع التحقق الموجود في بداية ShotTaken احتساب كرة تتدحرج إلى المرمى بعد انتهاء الوقت.
املأ الحقل game في نافذة Inspector بسحب كائن GameManager وإفلاته عليه، وسيعثر Unity على سكربت GameManager الموجود على ذلك الكائن. ويُعد المدير أيضًا المكان المناسب لعناصر واجهة العرض على الشاشة: عندما يحتفظ بنص النتيجة ولوحة انتهاء اللعبة، تتغير الشاشة في الأسلوب نفسه الذي يغيّر الأرقام، ولا يتعامل أي سكربت آخر مع واجهة المستخدم.
التحدي
سهلاجعل GameManager يتولى تسجيل النقاط والأرواح.
AddScore(int points): ما لم تكنgameOver، أضف إلىscoreواعرضScore: 6فيscoreText.LoseLife(): أنقصlivesبمقدار 1 واعرضLives: 2؛ وعند وصولها إلى 0، عيّنgameOver، وأظهرgameOverPanel، وعيّنplayer.enabled = false.- في
GemوBomb، عندما يكونother.CompareTag("Player")صحيحًا، استدعِgame.AddScore(points)أوgame.LoseLife()، ثمDestroy(gameObject).
اضغط «العب» واصطدم بثلاث قنابل. ثم اضغط «تحقق».
جرّب بنفسك
using UnityEngine;
using TMPro;
public class GameManager : MonoBehaviour
{
public TMP_Text scoreText;
public TMP_Text livesText;
public GameObject gameOverPanel;
public Player player;
private int score;
private int lives = 3;
private bool gameOver;
public void AddScore(int points)
{
// أضف النقاط واعرض النتيجة الجديدة، ما لم تكن اللعبة قد انتهت
}
public void LoseLife()
{
// أنقص حياة واحدة واعرض عدد الحيوات المتبقية؛ عند 0 حياة تنتهي اللعبة
}
}
جميع دروس إنشاء ألعاب حقيقية
4المشاهد والمستويات
تحميل مشهدإعادة تشغيل المستوىالمستوى التاليالاحتفاظ بالبيانات بين المشاهدمراجعة: اختيار المستوى10مشروع: لعبة منصات ثلاثية الأبعاد
المسارمنصات متحركة2الأزرار والشاشات
الأزرار وonClickالتعبيرات Lambdaالربط في Inspectorتشغيل اللوحات وإيقافهاأشرطة الصحةمراجعة: متجر الترقيات5الحفظ باستخدام PlayerPrefs
حفظ رقمالتحميل بقيمة افتراضيةأعلى نتيجةحفظ الإعداداتمراجعة: العملات في البنك6مشروع: عدّاء لا نهاية له
ثلاثة مساراتعقبات أمامكتدرّب بنفسك: Playground لـ Unity