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

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

جزء من قسم بناء ألعاب حقيقية في رحلة 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.

challenge icon

التحدي

متوسط

تحتوي شاشة الإعدادات على شريط تمرير لمستوى الصوت من 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) + "%";
    }
}
quiz iconاختبر نفسك

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

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