النمط Singleton
جزء من قسم إنشاء ألعاب حقيقية في رحلة Unity على Coddy. الدرس 13 من 60.
يحتاج مرجع Inspector إلى شيء يُسحب إليه. الأعداء الذين يُنشئهم مُولِّد أثناء اللعبة يأتون من prefab، ولا يمكن لـ prefab أن يشير إلا إلى الأصول وإلى أجزائه الخاصة، وليس إلى كائن في مشهد، لذلك يكون حقل GameManager لديهم فارغًا. الحل المعتاد هو singleton: يخزّن GameManager نفسه في حقل يمكن لكل نص برمجي الوصول إليه عبر اسم الصنف.
public class GameManager : MonoBehaviour
{
public static GameManager Instance;
private int kills;
void Awake()
{
Instance = this;
}
public void EnemyDown()
{
kills++;
Debug.Log("Kills: " + kills);
}
}// Enemy.cs، على قالب العدو
public void Die()
{
GameManager.Instance.EnemyDown();
Destroy(gameObject);
}تعني static أن الحقل يتبع الصنف، لا كائنًا. سيحصل كل كائن GameManager على kills خاص به، لكن لا توجد سوى Instance واحدة في اللعبة كلها، ويمكنك الوصول إليها باستخدام اسم الصنف: GameManager.Instance. يمكن لأي نص برمجي قراءتها، بما في ذلك عدو ظهر قبل دقيقة، من دون الحاجة إلى ملء حقل خاص به.
يعيّن المدير Instance = this; في Awake، حيث تشير this إلى النص البرمجي نفسه. تشغّل Unity كل استدعاءات Awake في المشهد قبل أي استدعاء Start، لذا يمكن للنصوص البرمجية الأخرى استخدام GameManager.Instance بدءًا من Start. سيستبدل GameManager ثانٍ في المشهد Instance بنفسه؛ يوضّح فصل Scenes and Levels كيفية منع ذلك.
التحدي
سهلاجعل النيازك تصل إلى GameManager عبر كائن مفرد.
- في
GameManager.cs، أضفpublic static GameManager Instance;وAwake()معInstance = this;. - في
Meteor.cs، احذف الحقلgameواستدعِGameManager.Instance.MeteorLanded()وGameManager.Instance.MeteorCaught()بدلًا منه.
اضغط «العب» والتقط نيزكًا: سيظهر Caught: 1، دون أخطاء في Console. ثم اضغط «تحقق».
جرّب بنفسك
using UnityEngine;
using TMPro;
public class GameManager : MonoBehaviour
{
public TMP_Text caughtText;
public TMP_Text shieldText;
private int caught;
private int shield = 3;
public void MeteorCaught()
{
caught++;
caughtText.text = "Caught: " + caught;
}
public void MeteorLanded()
{
shield--;
shieldText.text = "Shield: " + shield;
}
}
جميع دروس إنشاء ألعاب حقيقية
4المشاهد والمستويات
تحميل مشهدإعادة تشغيل المستوىالمستوى التاليالاحتفاظ بالبيانات بين المشاهدمراجعة: اختيار المستوى10مشروع: لعبة منصات ثلاثية الأبعاد
المسارمنصات متحركة2الأزرار والشاشات
الأزرار وonClickالتعبيرات Lambdaالربط في Inspectorتشغيل اللوحات وإيقافهاأشرطة الصحةمراجعة: متجر الترقيات5الحفظ باستخدام PlayerPrefs
حفظ رقمالتحميل بقيمة افتراضيةأعلى نتيجةحفظ الإعداداتمراجعة: العملات في البنك6مشروع: عدّاء لا نهاية له
ثلاثة مساراتعقبات أمامكتدرّب بنفسك: Playground لـ Unity