حفظ رقم
جزء من قسم بناء ألعاب حقيقية في رحلة 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 حلًا بديلًا؛ فهو يستمر ما دامت اللعبة قيد التشغيل، والخروج ينهي ذلك أيضًا.
التحدي
متوسطيحصي 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;
}
}
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس بناء ألعاب حقيقية
4المشاهد والمستويات
تحميل مشهدإعادة تشغيل المستوىالمستوى التاليالاحتفاظ بالبيانات بين المشاهدمراجعة: اختيار المستوى10مشروع: لعبة منصات ثلاثية الأبعاد
المسارالمنصات المتحركة2الأزرار والشاشات
الأزرار وonClickالتعبيرات Lambdaالربط في Inspectorتشغيل اللوحات وإيقافهاأشرطة الصحةمراجعة: متجر الترقيات5الحفظ باستخدام PlayerPrefs
حفظ رقمالتحميل بقيمة افتراضيةأعلى نتيجةحفظ الإعداداتمراجعة: العملات في البنك6مشروع: عدّاء بلا نهاية
ثلاثة مساراتعوائق أمامك