Menu
CoddyTech

בחירה ומחיקה של משבצת

חלק מהיחידה ארכיטקטורת משחקים ב-Unity במסלול ה-Unity של Coddy. שיעור 34 מתוך 64.

הפרק הזה כתב שמירות בפורמט JSON: מחלקת שמירה מסוג [System.Serializable], קבצים בנתיב Application.persistentDataPath, ומאתחלי שדות שמשלימים את מה שחסר בשמירה ישנה. עכשיו תפריט המשבצות מקבל את שני הפקדים האחרונים שלו.

challenge icon

אתגר

בינוני

תן לשחקן לבחור משבצת ולמחוק אותה.

  1. ב־Update(), החץ למטה מוסיף 1 ל־selected והחץ למעלה מפחית 1, תוך שמירה על הערך בין 0 ל־2 באמצעות Mathf.Min ו־Mathf.Max. לאחר מכן קוראים ל־Show().
  2. DeleteSelected() מוחקת את הקובץ של המשבצת שנבחרה באמצעות File.Delete, מגדירה את המשבצת ל־null וקוראת ל־Show().

לחץ על "שחק", מלא את משבצת 3 ולחץ על Delete: היא מוצגת כריקה. לאחר מכן לחץ על "בדיקה".

נסו בעצמכם

using System.IO;
using UnityEngine;
using UnityEngine.InputSystem;
using TMPro;

public class SlotMenu : MonoBehaviour
{
    public TMP_Text[] slotTexts;
    private SlotSave[] slots = new SlotSave[3];
    private int selected;

    void Start()
    {
        for (int i = 0; i < slots.Length; i++)
        {
            if (File.Exists(PathFor(i)))
            {
                slots[i] = JsonUtility.FromJson<SlotSave>(File.ReadAllText(PathFor(i)));
            }
        }
        Show();
    }

    void Update()
    {
        // החצים בוחרים משבצת
        if (Keyboard.current.spaceKey.wasPressedThisFrame)
        {
            if (slots[selected] == null)
            {
                slots[selected] = new SlotSave();
            }
            else
            {
                slots[selected].day++;
                slots[selected].gold += 15;
            }
            File.WriteAllText(PathFor(selected), JsonUtility.ToJson(slots[selected]));
            Show();
        }
    }

    // הכפתור Delete קורא לפונקציה הזו
    public void DeleteSelected()
    {
    }

    string PathFor(int index)
    {
        return Path.Combine(Application.persistentDataPath, "slot" + (index + 1) + ".json");
    }

    void Show()
    {
        for (int i = 0; i < slots.Length; i++)
        {
            string line = "Slot " + (i + 1) + ": ";
            if (slots[i] == null)
            {
                line += "empty";
            }
            else
            {
                line += "Day " + slots[i].day + ", " + slots[i].gold + " gold";
            }
            if (i == selected)
            {
                line = "> " + line;
            }
            slotTexts[i].text = line;
        }
    }
}
quiz iconבחנו את עצמכם

השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.

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

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