שמירת הגדרות
חלק מהיחידה בונים משחקים אמיתיים במסלול ה-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 עבור Toggle, ו-float עבור Slider, שמיקומו הוא slider.value. הגדרת isOn או value מתוך הקוד משנה את הפקד כאילו השחקן שינה אותו, ולכן כשהערך משתנה, גם המאזינים נקראים. לכן המאזין מתווסף לאחר הטעינה: אם הוא יתווסף קודם, הוא יופעל בכל הפעלה וישמור מיד בחזרה את הערך שנטען. SetIsOnWithoutNotify ו-SetValueWithoutNotify מגדירים פקד בלי לקרוא לאף מאזין.
ערך ברירת המחדל קובע מה שחקן חדש יקבל. GetInt("ShowTimer", 1) מציג את הטיימר עד שהשחקן מכבה אותו; ערך ברירת מחדל של 0 יסתיר אותו מכל מי שמעולם לא פתח את ההגדרות. הגדרת float נטענת באותו אופן באמצעות 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) + "%";
}
}
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה בונים משחקים אמיתיים
10פרויקט: משחק פלטפורמה תלת־ממדי
המסלולפלטפורמות נעות