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

حفظ رقم

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

يبدأ كل حقل بقيمته الافتراضية عند بدء اللعبة. اللاعب الذي يجمع 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

التحدي

متوسط

يحصي JumpCounter الخاص بـ Hopper قفزاته على الشاشة، لكن العدد مجرد حقل عادي، لذا تبدأ كل لعبة جديدة من Jumps: 0. اجعله إجماليًا مدى الحياة يستمر من لعبة إلى أخرى:

  • بعد كل قفزة، احفظ jumps باستخدام PlayerPrefs.SetInt تحت المفتاح TotalJumps، واكتبه على القرص باستخدام PlayerPrefs.Save().
  • في Start()، حمّل الإجمالي المحفوظ إلى jumps قبل أن يعرضه النص.

اضغط Play واقفز بضع مرات، ثم اضغط Stop وPlay مجددًا: سيستمر العد. ثم اضغط Check.

جرّب بنفسك

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;
    }
}
quiz iconاختبر نفسك

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

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