Menu
CoddyTech

Bir Yuva Seçme ve Silme

Coddy'nin Unity Journey'sinin Unity'de Oyun Mimarisi bölümünün bir parçası. Ders 34 / 64.

Bu bölüm, kayıtları JSON olarak yazdı: [System.Serializable] bir kayıt sınıfı, Application.persistentDataPath içindeki dosyalar ve eski bir kayıtta eksik olanları dolduran alan başlatıcıları. Yuva menüsü artık son iki kontrolünü de alıyor.

challenge icon

Görev

Orta

Oyuncunun bir kayıt yuvası seçip silmesini sağla.

  1. Update() içinde aşağı ok, selected değerini 1 artırır; yukarı ok ise 1 azaltır. Mathf.Min ve Mathf.Max ile değer 0 ile 2 arasında tutulur. Ardından Show() çağrılır.
  2. DeleteSelected(), seçili yuvanın dosyasını File.Delete ile siler, yuvayı null olarak ayarlar ve Show() çağrısı yapar.

“Oyna” düğmesine bas, 3. yuvayı doldur ve “Delete” düğmesine tıkla: yuva boş görünür. Ardından “Kontrol et” düğmesine bas.

Kendin dene

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()
    {
        // Ok tuşları bir kayıt yuvası seçer
        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();
        }
    }

    // Delete düğmesi bunu çağırır
    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 iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

Unity'de Oyun Mimarisi bölümündeki tüm dersler

Kendi başına pratik yap: Unity playground