שמירת מספר
חלק מהיחידה בונים משחקים אמיתיים במסלול ה-Unity של Coddy. שיעור 22 מתוך 56.
כל שדה מתחיל בערך ברירת המחדל שלו כשהמשחק מתחיל. שחקן שאוסף 40 אבני חן, יוצא מהמשחק וחוזר מחר ימצא שמספר אבני החן הוא 0, כי יציאה מסיימת את המשחק ואת כל מה שבתוכו. PlayerPrefs שומר ערכים קטנים במכשיר של השחקן בין משחקים. כל ערך נשמר תחת מפתח, מחרוזת שתבחרו, באמצעות SetInt, SetFloat או SetString:
PlayerPrefs.SetString("PlayerName", "Robin");
PlayerPrefs.SetInt("LevelReached", 4);
PlayerPrefs.SetFloat("HoursPlayed", 2.5f);
PlayerPrefs.Save();כדי לקרוא ערך בחזרה, קוראים ל־Get מאותו סוג עם אותו מפתח. מפתח שמעולם לא נשמר נקרא כ־0, 0 או כמחרוזת ריקה, ולכן במשחק הראשון של השחקן, ברכה זו מציגה שם ריק ודרגה 0:
void Start()
{
string player = PlayerPrefs.GetString("PlayerName");
int level = PlayerPrefs.GetInt("LevelReached");
Debug.Log(player + " is on level " + level);
}המפתחות רגישים לאותיות גדולות וקטנות: GetInt("levelreached") קורא מפתח שמעולם לא נשמר ומחזיר 0. מפתח מכיל ערך מסוג אחד, לכן קראו אותו באמצעות Get שתואם ל־Set שלו. שמרו ערך כשהוא משתנה, ולא רק כשהמשחק מסתיים. Unity כותבת את PlayerPrefs לדיסק כשהמשחק נסגר כרגיל, ו־PlayerPrefs.Save() כותב אותם מיד, כך שקריסה לא תגרום לאובדנם. שדה static אינו דרך לעקוף זאת: הוא נשמר כל עוד המשחק פועל, וגם זה מסתיים כשיוצאים.
אתגר
בינוניהקוד JumpCounter של הופר סופר את הקפיצות שלו על המסך, אבל המונה הוא שדה רגיל, ולכן כל משחק חדש מתחיל שוב ב־Jumps: 0. הפכו אותו לסכום כולל שנשמר לאורך משחקים:
- אחרי כל קפיצה, שמרו את
jumpsבעזרתPlayerPrefs.SetIntתחת המפתחTotalJumps, וכתבו אותו לדיסק בעזרתPlayerPrefs.Save(). - ב־
Start(), טענו את הסכום הכולל השמור לתוךjumpsלפני שהטקסט מציג אותו.
לחצו על Play וקפצו כמה פעמים, ואז לחצו על Stop ועל Play שוב: הספירה ממשיכה מהמקום שבו נעצרה. לאחר מכן לחצו על Check.
נסו בעצמכם
using UnityEngine;
using TMPro;
public class JumpCounter : MonoBehaviour
{
public TMP_Text jumpsText;
public float hop = 5f;
private Rigidbody rb;
private int jumps;
void Start()
{
rb = GetComponent<Rigidbody>();
ShowJumps();
}
void Update()
{
if (Input.GetKeyDown(KeyCode.Space))
{
rb.linearVelocity = Vector3.up * hop;
jumps++;
ShowJumps();
}
}
void ShowJumps()
{
jumpsText.text = "Jumps: " + jumps;
}
}
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה בונים משחקים אמיתיים
10פרויקט: משחק פלטפורמה תלת־ממדי
המסלולפלטפורמות נעות