Menu
CoddyTech

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

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

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

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

التحدي

متوسط

امنح اللاعب الجديد 5 أرصدة مجانية ورسالة ترحيب.

  1. في Start()، حمّل قيمة افتراضية: credits = PlayerPrefs.GetInt("Credits", 5);.
  2. استبدل welcomeText.SetActive(false); بـ welcomeText.SetActive(!PlayerPrefs.HasKey("Credits"));.

اضغط على «العب» والعب جولة، ثم اضغط على «إيقاف» و«العب»: ستختفي رسالة الترحيب. ثم اضغط على «تحقق».

جرّب بنفسك

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;
    }
}

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

تدرّب بنفسك: Playground لـ Unity