Menu
CoddyTech

Scegli ed elimina uno slot

Fa parte della sezione Architettura dei giochi in Unity del percorso Unity di Coddy. Lezione 34 di 64.

Questo capitolo ha scritto i salvataggi in JSON: una classe di salvataggio [System.Serializable], file in Application.persistentDataPath e inizializzatori di campo che inseriscono ciò che manca a un vecchio salvataggio. Ora al menu degli slot vengono aggiunti gli ultimi due controlli.

challenge icon

Sfida

Medio

Consenti al giocatore di scegliere uno slot ed eliminarlo.

  1. In Update(), la freccia giù aggiunge 1 a selected e la freccia su sottrae 1, mantenendo il valore tra 0 e 2 con Mathf.Min e Mathf.Max. Poi chiama Show().
  2. DeleteSelected() elimina il file dello slot selezionato con File.Delete, imposta lo slot su null e chiama Show().

Premi «Gioca», riempi lo slot 3 e fai clic su Delete: risulta vuoto. Poi premi «Verifica».

Provalo tu

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()
    {
        // Le frecce selezionano uno slot
        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();
        }
    }

    // Il pulsante Delete richiama questo metodo
    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 iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Architettura dei giochi in Unity

Esercitati da solo: Playground Unity