שמירת הגדרות
חלק מהיחידה בניית משחקים אמיתיים במסלול ה-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 (מלאה), שמכפילה את העוצמה של כל צליל במשחק.
אתגר
בינונישמור את מחוון עוצמת הקול כהגדרה תחת המפתח Volume.
- ב־
Start(), טען אתPlayerPrefs.GetFloat("Volume", 0.8f), הצב את הערך שלו ב־slider.valueוב־AudioListener.volume, וקרא ל־ShowVolume. - לאחר מכן הוסף את
slider.onValueChanged.AddListener(OnVolumeChanged);. - ב־
OnVolumeChanged, החל אתvalueעלAudioListener.volume, הצג אותו ושמור אותו באמצעותPlayerPrefs.SetFloatו־PlayerPrefs.Save().
לחץ על „שחק” והזז את המחוון, ואז על עצור ועל „שחק”: המחוון נשאר במקום שבו השארת אותו. לאחר מכן לחץ על „בדיקה”.
נסו בעצמכם
using UnityEngine;
using UnityEngine.UI;
using TMPro;
public class VolumeSetting : MonoBehaviour
{
public Slider slider;
public TMP_Text volumeText;
void Start()
{
// טען את עוצמת הקול השמורה, החל והצג אותה, ואז האזן לשינויים ב-slider
}
void OnVolumeChanged(float value)
{
// החל, הצג ושמור את עוצמת הקול החדשה
}
void ShowVolume(float volume)
{
volumeText.text = "Volume: " + Mathf.RoundToInt(volume * 100) + "%";
}
}
כל השיעורים ביחידה בניית משחקים אמיתיים
10פרויקט: משחק פלטפורמה תלת־ממדי
המסלולפלטפורמות נעותתרגלו בעצמכם: Unity אונליין