Menu
CoddyTech

Chọn và xóa một ô lưu

Thuộc phần Kiến trúc trò chơi trong Unity trong hành trình Unity của Coddy. Bài học 34 trên 64.

Trong chương này, bạn đã viết phần lưu dưới dạng JSON: lớp lưu có thể tuần tự hóa [System.Serializable], các tệp trong Application.persistentDataPath và các trình khởi tạo trường bổ sung những gì tệp lưu cũ còn thiếu. Giờ đây, menu khe lưu có hai nút điều khiển cuối cùng.

challenge icon

Thử thách

Trung bình

Để người chơi chọn một ô lưu và xóa ô đó.

  1. Trong Update(), phím mũi tên xuống tăng selected thêm 1 và phím mũi tên lên giảm đi 1, giữ giá trị trong khoảng từ 0 đến 2 bằng Mathf.Min và Mathf.Max. Sau đó gọi Show().
  2. DeleteSelected() xóa tệp của ô lưu đã chọn bằng File.Delete, đặt ô lưu thành null và gọi Show().

Nhấn Chơi, điền dữ liệu vào ô lưu 3 rồi nhấn Xóa: ô đó sẽ hiển thị trống. Sau đó nhấn Kiểm tra.

Tự làm thử

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()
    {
        // Các phím mũi tên chọn một ô lưu
        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();
        }
    }

    // Nút Delete gọi phương thức này
    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 iconTự kiểm tra

Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.

Tất cả bài học trong Kiến trúc trò chơi trong Unity

Tự luyện tập: Playground Unity