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.
Desafío
IntermedioDeja que el jugador elija una ranura y la elimine.
- En
Update(), la flecha hacia abajo suma 1 aselectedy la flecha hacia arriba resta 1, manteniendo el valor entre 0 y 2 conMathf.MinyMathf.Max. Después,Show(). DeleteSelected()elimina el archivo de la ranura seleccionada conFile.Delete, establece la ranura ennully llama aShow().
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;
}
}
}
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
1Componentes, no jerarquías
Componentes pequeñosUn script base para enemigosComponentes abstractosComponentes que trabajan juntosRepaso: torreta modularRepaso: cañón doble4Datos serializados
Clases serializablesListas en el InspectorEnumeraciones en el InspectorRepaso: tabla de botínRepaso: sortear el botín2Interfaces en Unity
IDamageableInterfaces y TryGetComponentGetComponentsRepaso: Tecla de interacciónRepaso: El más cercano al alcance5ScriptableObjects
Activos de datosEstadísticas de armasConfiguración compartidaGuardar el vientoOleadas como datosRepaso: base de datos de objetosRepaso: comprar en la tienda3Eventos
Eventos de C# en UnitySuscribirse en OnEnableCampos UnityEventLos eventos controlan la interfazRepaso: ventana emergente de logrosRepaso: temporizador de la ventana emergente6Guardar con JSON
JsonUtilityGuarda la partidaCargar y valores predeterminadosRepaso: espacios de guardadoElegir y eliminar un espacioPractica por tu cuenta: Playground de Unity