Menu
CoddyTech

Elegir y eliminar un espacio

Parte de la sección Arquitectura de juegos en Unity del Journey de Unity de Coddy. Lección 34 de 64.

Este capítulo escribió las partidas guardadas como JSON: una clase de guardado [System.Serializable], archivos en Application.persistentDataPath e inicializadores de campos que completan lo que le falta a una partida guardada antigua. El menú de ranuras ahora recibe sus dos últimos controles.

challenge icon

Desafío

Intermedio

Deja que el jugador elija una ranura y la elimine.

  1. En Update(), la flecha hacia abajo suma 1 a selected y la flecha hacia arriba resta 1, manteniendo el valor entre 0 y 2 con Mathf.Min y Mathf.Max. Después, Show().
  2. DeleteSelected() elimina el archivo de la ranura seleccionada con File.Delete, establece la ranura en null y llama a Show().

Pulsa «Jugar», completa la ranura 3 y haz clic en «Eliminar»: aparece vacía. Después, pulsa «Comprobar».

Pruébalo tú mismo

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()
    {
        // Las flechas seleccionan una ranura
        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();
        }
    }

    // El botón Delete llama a este método
    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 iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Arquitectura de juegos en Unity

Practica por tu cuenta: Playground de Unity