Menu
CoddyTech

حفظ رقم

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

يبدأ كل حقل بقيمته الافتراضية عند بدء اللعبة. اللاعب الذي يجمع 40 جوهرة، ثم يغادر ويعود غدًا، يجد عدد الجواهر 0، لأن مغادرة اللعبة تنهيها وتنهي كل ما فيها. يحتفظ PlayerPrefs بقيم صغيرة على جهاز اللاعب بين الألعاب. تُخزَّن كل قيمة تحت مفتاح، وهو سلسلة نصية تختارها، باستخدام SetInt أو SetFloat أو SetString:

PlayerPrefs.SetString("PlayerName", "Robin");
PlayerPrefs.SetInt("LevelReached", 4);
PlayerPrefs.SetFloat("HoursPlayed", 2.5f);
PlayerPrefs.Save();

لقراءة قيمة مجددًا، استدعِ دالة Get من النوع نفسه وبالمفتاح نفسه. تُقرأ قيمة المفتاح الذي لم يسبق حفظه على أنها 0 أو 0 أو سلسلة نصية فارغة، لذا تظهر هذه التحية اسمًا فارغًا ومستوى 0 في أول لعبة للاعب:

void Start()
{
    string player = PlayerPrefs.GetString("PlayerName");
    int level = PlayerPrefs.GetInt("LevelReached");
    Debug.Log(player + " is on level " + level);
}

المفاتيح حساسة لحالة الأحرف: تقرأ GetInt("levelreached") مفتاحًا لم يسبق حفظه وتُرجع 0. يحتفظ المفتاح بنوع واحد، لذا اقرأه باستخدام دالة Get المطابقة لدالة Set التي استخدمتها. احفظ القيمة عند تغيّرها، لا عند انتهاء اللعبة فقط. تكتب Unity قيم PlayerPrefs على القرص عند خروج اللعبة بشكل طبيعي، وتكتبها PlayerPrefs.Save() فورًا، لذا لا يمكن لتعطّل اللعبة أن يؤدي إلى فقدانها. لا يشكّل الحقل static حلًا بديلًا: فهو يبقى ما دامت اللعبة قيد التشغيل، ومغادرة اللعبة تنهي ذلك أيضًا.

challenge icon

التحدي

متوسط

اجعل عدد القفزات إجماليًا مدى الحياة، محفوظًا بين جلسات اللعب.

  1. في Update()، بعد jumps++;، أضف PlayerPrefs.SetInt("TotalJumps", jumps); وPlayerPrefs.Save();.
  2. في Start()، أعلى ShowJumps();، حمّله: jumps = PlayerPrefs.GetInt("TotalJumps");.

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

جرّب بنفسك

using UnityEngine;
using TMPro;

public class JumpCounter : MonoBehaviour
{
    public TMP_Text jumpsText;
    public float hop = 5f;
    private Rigidbody rb;
    private int jumps;

    void Start()
    {
        rb = GetComponent<Rigidbody>();
        ShowJumps();
    }

    void Update()
    {
        if (Input.GetKeyDown(KeyCode.Space))
        {
            rb.linearVelocity = Vector3.up * hop;
            jumps++;
            ShowJumps();
        }
    }

    void ShowJumps()
    {
        jumpsText.text = "Jumps: " + jumps;
    }
}

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

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