Menu
CoddyTech
flag Ar iconالعربيةdown icon

التحميل بقيمة افتراضية

جزء من قسم بناء ألعاب حقيقية في رحلة Unity على Coddy. الدرس 23 من 56.

تُقرأ قيمة المفتاح الذي لم يُحفَظ مطلقًا على أنها 0، و0 ليست قيمة بداية مناسبة لبعض القيم. تتيح لعبة سباق للاعب اختيار عدد المنافسين الذين يتحكم بهم الكمبيوتر ويشاركون في السباق، وينبغي للاعب الجديد أن يتسابق ضد 3 منافسين. يأخذ كل استدعاء لجلب قيمة وسيطًا ثانيًا، هو القيمة الافتراضية، التي يعيدها عندما يكون المفتاح مفقودًا:

int rivals = PlayerPrefs.GetInt("Rivals", 3);
string driver = PlayerPrefs.GetString("Driver", "Rookie");

بمجرد أن يحفظ اللاعب 0 منافسين ليتدرّب بمفرده، تُعيد GetInt("Rivals", 3) القيمة 0: لا تُستخدم القيمة الافتراضية إلا عند غياب المفتاح. لذلك فإن if (rivals == 0) rivals = 3; طريقة خاطئة لتعيين قيمة افتراضية. فهي لا تستطيع التمييز بين قيمة 0 محفوظة وعدم حفظ أي قيمة، وتعيد 3 منافسين إلى كل سباق تدريبي.

تجيب PlayerPrefs.HasKey(key) عمّا إذا كان قد تم حفظ مفتاح من قبل، مهما كانت قيمته، لذا فهي تميّز بين اللعبة الأولى واللعبة اللاحقة. ترحّب هذه اللعبة بسائق جديد:

void Start()
{
    if (!PlayerPrefs.HasKey("Driver"))
    {
        Debug.Log("First race! Pick a name in the garage.");
    }
    string driver = PlayerPrefs.GetString("Driver", "Rookie");
    Debug.Log("Driver: " + driver);
}

تحقّق من HasKey قبل أي شيفرة تحفظ المفتاح: فمنذ أول عملية حفظ، تُعيد true إلى أن يُزال المفتاح باستخدام PlayerPrefs.DeleteKey.

challenge icon

التحدي

متوسط

تحتفظ آلة الألعاب برصيد اللاعب تحت المفتاح Credits: يؤدي الضغط على مفتاح المسافة إلى لعب لعبة مقابل رصيد واحد، ويُحفظ الرصيد المتبقي بعد كل لعبة. لم تتم معالجة اللاعبين الجدد بعد:

  • يبدأ اللاعب الذي لا يملك أي رصيد محفوظ بـ 5 أرصدة مجانية. أما اللاعب الذي استهلك جميع أرصدته، فلديه 0 رصيد محفوظ، ويبدأ بـ 0، وليس 5.
  • يظهر الكائن welcomeText (Welcome! Here are 5 free credits) فقط للاعب الذي ليس لديه أي Credits محفوظة. أما سائر اللاعبين فلا يرونه.

اضغط على Play والعب لعبة، ثم اضغط على Stop وPlay مرة أخرى: ستختفي رسالة الترحيب. ثم اضغط على Check.

جرّب بنفسك

using UnityEngine;
using TMPro;

public class ArcadeCredits : MonoBehaviour
{
    public TMP_Text creditsText;
    public GameObject welcomeText;
    private int credits;

    void Start()
    {
        credits = PlayerPrefs.GetInt("Credits");
        welcomeText.SetActive(false);
        ShowCredits();
    }

    void Update()
    {
        if (Input.GetKeyDown(KeyCode.Space) && credits > 0)
        {
            credits--;
            PlayerPrefs.SetInt("Credits", credits);
            PlayerPrefs.Save();
            ShowCredits();
        }
    }

    void ShowCredits()
    {
        creditsText.text = "Credits: " + credits;
    }
}
quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس بناء ألعاب حقيقية