Menu
CoddyTech

حفظ الإعدادات

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

يُختار الإعداد مرة واحدة، ويُتوقع أن يبقى محفوظًا في كل لعبة لاحقة، لذا مكانه هو 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. يُضبط مستوى الصوت على AudioListener.volume، وهو مستوى الصوت الرئيسي في Unity، من 0 (صامت) إلى 1 (كامل)، ويضبط مستوى كل صوت في اللعبة.

challenge icon

التحدي

متوسط

اجعل شريط تمرير مستوى الصوت إعدادًا محفوظًا تحت المفتاح Volume.

  1. في Start()، حمّل PlayerPrefs.GetFloat("Volume", 0.8f)، وضع القيمة في slider.value وAudioListener.volume، واستدعِ ShowVolume.
  2. ثم أضف slider.onValueChanged.AddListener(OnVolumeChanged);.
  3. في OnVolumeChanged، طبّق value على AudioListener.volume، واعرضه، واحفظه باستخدام PlayerPrefs.SetFloat وPlayerPrefs.Save().

اضغط «العب» وحرّك شريط التمرير، ثم اضغط Stop و«العب»: سيبقى في الموضع الذي تركته فيه. ثم اضغط «تحقق».

جرّب بنفسك

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) + "%";
    }
}

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

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