حفظ الإعدادات
جزء من قسم بناء ألعاب حقيقية في رحلة Unity على Coddy. الدرس 25 من 56.
يُختار الإعداد مرة واحدة، ويُتوقع أن يعود في كل لعبة لاحقة، لذا يجب حفظه في PlayerPrefs. عند بدء اللعبة، حمّل الإعداد، وضعه في عنصر التحكم الخاص به كي تعرضه شاشة الإعدادات، ثم طبّقه على اللعبة. عندما يغيّر اللاعب عنصر التحكم، طبّق القيمة الجديدة واحفظها. يعمل مفتاح التبديل هذا (using UnityEngine.UI;) على إظهار المؤقت على الشاشة أو إخفائه، وبما أن PlayerPrefs لا يدعم القيم المنطقية، فإنه يخزّن 1 للتشغيل و0 للإيقاف:
public Toggle timerToggle;
public GameObject timerText;
void Start()
{
bool show = PlayerPrefs.GetInt("ShowTimer", 1) == 1;
timerToggle.isOn = show;
timerText.SetActive(show);
timerToggle.onValueChanged.AddListener(OnTimerToggled);
}
void OnTimerToggled(bool on)
{
timerText.SetActive(on);
PlayerPrefs.SetInt("ShowTimer", on ? 1 : 0);
PlayerPrefs.Save();
}يمرّر onValueChanged القيمة الجديدة لعنصر التحكم إلى المستمع: قيمة bool لمفتاح التبديل، وقيمة float لشريط التمرير، الذي يكون موضعه slider.value. يؤدي ضبط isOn أو value برمجيًا إلى تغيير عنصر التحكم كما يفعل اللاعب، لذا عند تغيّر القيمة، تُستدعى المستمعات أيضًا. لهذا السبب يُضاف المستمع بعد التحميل: فلو أُضيف أولًا، لاشتغل عند كل بدء وحفظ القيمة المحمّلة مباشرةً من جديد. يضبط SetIsOnWithoutNotify وSetValueWithoutNotify عنصر التحكم دون استدعاء أي مستمع.
تحدد القيمة الافتراضية ما يحصل عليه اللاعب الجديد. تعرض GetInt("ShowTimer", 1) المؤقت حتى يوقفه اللاعب؛ أما القيمة الافتراضية 0 فستُخفيه عن كل من لم يفتح الإعدادات من قبل. يُحمّل إعداد عشري بالطريقة نفسها باستخدام PlayerPrefs.GetFloat(key, defaultValue): تمنح GetFloat("MouseSensitivity", 1.5f) اللاعب الجديد القيمة 1.5.
التحدي
متوسطتحتوي شاشة الإعدادات على شريط تمرير لمستوى الصوت من 0 إلى 1 ونص يعرضه كنسبة مئوية. اجعل مستوى الصوت إعدادًا محفوظًا، تحت المفتاح Volume:
- يبدأ اللاعب الجديد عند 0.8، ويظهر مستوى الصوت على أنه Volume: 80%.
- ينطبق مستوى الصوت على اللعبة بأكملها عبر
AudioListener.volume، وهو مستوى الصوت الرئيسي في Unity من 0 (صامت) إلى 1 (كامل)، والذي يضبط كل صوت في اللعبة. - عند بدء اللعبة، يُطبّق مستوى الصوت المحفوظ، ويعرضه شريط التمرير والنص.
- عندما يحرّك اللاعب شريط التمرير، يُطبّق مستوى الصوت الجديد، ويتبعه النص، ويُحفظ مستوى الصوت.
تكتب ShowVolume(float volume) النص بالفعل.
اضغط على Play وحرّك شريط التمرير، ثم Stop وPlay مرة أخرى، ثم Check.
جرّب بنفسك
using UnityEngine;
using UnityEngine.UI;
using TMPro;
public class VolumeSetting : MonoBehaviour
{
public Slider slider;
public TMP_Text volumeText;
void Start()
{
// حمّل مستوى الصوت المحفوظ، وطبّقه واعرضه، ثم استمع إلى تغييرات شريط التمرير
}
void OnVolumeChanged(float value)
{
// طبّق مستوى الصوت الجديد واعرضه واحفظه
}
void ShowVolume(float volume)
{
volumeText.text = "Volume: " + Mathf.RoundToInt(volume * 100) + "%";
}
}
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس بناء ألعاب حقيقية
4المشاهد والمستويات
تحميل مشهدإعادة تشغيل المستوىالمستوى التاليالاحتفاظ بالبيانات بين المشاهدمراجعة: اختيار المستوى10مشروع: لعبة منصات ثلاثية الأبعاد
المسارالمنصات المتحركة2الأزرار والشاشات
الأزرار وonClickالتعبيرات Lambdaالربط في Inspectorتشغيل اللوحات وإيقافهاأشرطة الصحةمراجعة: متجر الترقيات5الحفظ باستخدام PlayerPrefs
حفظ رقمالتحميل بقيمة افتراضيةأعلى نتيجةحفظ الإعداداتمراجعة: العملات في البنك6مشروع: عدّاء بلا نهاية
ثلاثة مساراتعوائق أمامك