Menu
CoddyTech

שמירת מספר

חלק מהיחידה בניית משחקים אמיתיים במסלול ה-Unity של Coddy. שיעור 22 מתוך 60.

כל שדה מתחיל בערך ברירת המחדל שלו כשהמשחק מתחיל. שחקן שאוסף 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 אינו דרך לעקוף זאת: הוא נשמר כל עוד המשחק פועל, וגם זה מסתיים כשיוצאים.

challenge icon

אתגר

בינוני

הפוך את ספירת הקפיצות לספירה מצטברת לכל החיים, שנשמרת בין משחקים.

  1. ב־Update(), אחרי jumps++;, הוסף את PlayerPrefs.SetInt("TotalJumps", jumps); ואת PlayerPrefs.Save();.
  2. ב־Start(), מעל ShowJumps();, טען את הערך: jumps = PlayerPrefs.GetInt("TotalJumps");.

לחץ על "שחק" וקפוץ, ואז על עצירה ועל "שחק" שוב: הספירה נמשכת. לאחר מכן לחץ על "בדיקה".

נסו בעצמכם

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;
    }
}

כל השיעורים ביחידה בניית משחקים אמיתיים

תרגלו בעצמכם: Unity אונליין