טעינה עם ערך ברירת מחדל
חלק מהיחידה בונים משחקים אמיתיים במסלול ה-Unity של Coddy. שיעור 23 מתוך 56.
קריאה של מפתח שמעולם לא נשמר מחזירה 0, ו־0 הוא ערך התחלתי גרוע עבור ערכים מסוימים. במשחק מרוצים, השחקן יכול לבחור כמה יריבים ממוחשבים ישתתפו במרוץ, ושחקן חדש אמור להתחרות מול 3. כל קריאה מקבלת ארגומנט שני, ערך ברירת המחדל, שאותו היא מחזירה כשהמפתח חסר:
int rivals = PlayerPrefs.GetInt("Rivals", 3);
string driver = PlayerPrefs.GetString("Driver", "Rookie");ברגע שהשחקן שומר 0 יריבים כדי להתאמן לבד, GetInt("Rivals", 3) מחזירה 0: ערך ברירת המחדל משמש רק כשהמפתח חסר. לכן if (rivals == 0) rivals = 3; היא דרך שגויה לקבוע ערך ברירת מחדל. היא לא יכולה להבחין בין 0 שנשמר לבין מצב שבו לא נשמר דבר, ומחזירה 3 יריבים לכל מרוץ אימון.
PlayerPrefs.HasKey(key) בודקת אם מפתח נשמר אי פעם, בלי קשר לערכו, ולכן היא מבדילה בין משחק ראשון למשחק מאוחר יותר. המשחק הזה מברך נהג חדש:
void Start()
{
if (!PlayerPrefs.HasKey("Driver"))
{
Debug.Log("First race! Pick a name in the garage.");
}
string driver = PlayerPrefs.GetString("Driver", "Rookie");
Debug.Log("Driver: " + driver);
}יש לקרוא ל־HasKey לפני כל קוד ששומר את המפתח: החל מהשמירה הראשונה, היא מחזירה true עד שהמפתח מוסר באמצעות PlayerPrefs.DeleteKey.
אתגר
בינונימכונת הארקייד שומרת את הקרדיטים של השחקן תחת המפתח Credits: לחיצה על Space מפעילה משחק תמורת קרדיט אחד, והקרדיטים שנותרו נשמרים אחרי כל משחק. עדיין לא מטפלים בשחקנים חדשים:
- שחקן שאין לו שום דבר שמור מתחיל עם 5 קרדיטים בחינם. שחקן שניצל את כל הקרדיטים שמר 0, ומתחיל עם 0 ולא עם 5.
- האובייקט
welcomeText(Welcome! Here are 5 free credits) מוצג רק לשחקן שלא שמרCredits. כל שחקן אחר לא רואה אותו.
לחצו על Play ושחקו משחק, ואז לחצו על Stop ועל Play שוב: הודעת הפתיחה נעלמה. לאחר מכן לחצו על Check.
נסו בעצמכם
using UnityEngine;
using TMPro;
public class ArcadeCredits : MonoBehaviour
{
public TMP_Text creditsText;
public GameObject welcomeText;
private int credits;
void Start()
{
credits = PlayerPrefs.GetInt("Credits");
welcomeText.SetActive(false);
ShowCredits();
}
void Update()
{
if (Input.GetKeyDown(KeyCode.Space) && credits > 0)
{
credits--;
PlayerPrefs.SetInt("Credits", credits);
PlayerPrefs.Save();
ShowCredits();
}
}
void ShowCredits()
{
creditsText.text = "Credits: " + credits;
}
}
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה בונים משחקים אמיתיים
10פרויקט: משחק פלטפורמה תלת־ממדי
המסלולפלטפורמות נעות