Menu
CoddyTech

Wybierz i usuń slot

Część sekcji Architektura gier w Unity ścieżki Unity w Coddy. Lekcja 34 z 64.

W tym rozdziale zapisywaliśmy dane w formacie JSON: klasę zapisu oznaczoną atrybutem [System.Serializable], pliki w lokalizacji Application.persistentDataPath oraz inicjalizatory pól, które uzupełniają brakujące dane w starym zapisie. Menu slotów otrzymuje teraz dwa ostatnie elementy sterujące.

challenge icon

Wyzwanie

Średni

Pozwól graczowi wybrać slot i go usunąć.

  1. W Update() strzałka w dół zwiększa selected o 1, a strzałka w górę zmniejsza go o 1; wartość jest ograniczona do zakresu od 0 do 2 za pomocą Mathf.Min i Mathf.Max. Następnie wywołaj Show().
  2. DeleteSelected() usuwa plik wybranego slotu za pomocą File.Delete, ustawia slot na null i wywołuje Show().

Naciśnij „Graj”, wypełnij slot 3 i kliknij „Usuń”: pojawi się informacja, że jest pusty. Następnie naciśnij „Sprawdź”.

Spróbuj swoich sił

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()
    {
        // Strzałki wybierają 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();
        }
    }

    // Przycisk Delete wywołuje tę metodę
    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 iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Architektura gier w Unity

Poćwicz samodzielnie: Edytor online Unity