Menu
CoddyTech

Choisir et supprimer un emplacement

Fait partie de la section Architecture de jeu dans Unity du Journey Unity de Coddy. Leçon 34 sur 64.

Ce chapitre a écrit les sauvegardes au format JSON : une classe de sauvegarde [System.Serializable], des fichiers dans Application.persistentDataPath et des initialiseurs de champs qui complètent les éléments manquants dans une ancienne sauvegarde. Le menu des emplacements reçoit maintenant ses deux derniers contrôles.

challenge icon

Défi

Moyen

Laisse le joueur choisir un emplacement et le supprimer.

  1. Dans Update(), la flèche vers le bas ajoute 1 à selected et la flèche vers le haut en retire 1, en restant entre 0 et 2 grâce à Mathf.Min et Mathf.Max. Puis appelle Show().
  2. DeleteSelected() supprime le fichier de l'emplacement sélectionné avec File.Delete, définit l'emplacement sur null et appelle Show().

Appuie sur « Jouer », remplis l'emplacement 3 et clique sur « Delete » : il affiche « empty ». Puis clique sur « Vérifier ».

Essayez vous-même

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()
    {
        // Les flèches permettent de choisir un emplacement
        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();
        }
    }

    // Le bouton Delete appelle cette méthode
    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 iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

Toutes les leçons de Architecture de jeu dans Unity

Entraînez-vous par vous-même : Playground Unity