Menu
CoddyTech

Inspector'da Listeler

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

[System.Serializable] girdilerinden oluşan bir liste, Inspector'da doldurduğun bir tablodur. Bu muhafız, duraklardan oluşan bir güzergâhta ilerler ve her durakta, ilgili girdi şöyle dediği sürece bekler:

[System.Serializable]
public class Stop
{
    public Transform point;
    public float wait = 1f;
}

public class Patrol : MonoBehaviour
{
    public float speed = 3f;
    public List<Stop> stops;
    private int current;
    private float waited;

    void Update()
    {
        Stop stop = stops[current];
        transform.position = Vector3.MoveTowards(transform.position, stop.point.position, speed * Time.deltaTime);
        if (transform.position != stop.point.position) return;
        waited += Time.deltaTime;
        if (waited >= stop.wait)
        {
            waited = 0f;
            current = (current + 1) % stops.Count;
        }
    }
}

Inspector, sayısıyla birlikte Stops'u ve her girdi için birer açılır bölümü (Element 0, Element 1 vb.) gösterir; her birinde Point ve Wait bulunur. + düğmesi bir girdi ekler, eksi düğmesi seçili olanı kaldırır ve satırın solundaki tutamaç, satırı güzergâhta yeni bir konuma sürüklemeni sağlar. Kod, listeyi her zamanki gibi okur: stops.Count girdi, stops[current].point ve (current + 1) % stops.Count son duraktan sonra ilk durağa geri döner. Seviye tasarımcısı, betiğe dokunmadan bir muhafıza üç, diğerine on durak verebilir.

Bir dizi olan public Stop[] stops; da aynı şekilde görünür. Unity'deki + düğmesi son girdiyi kopyalar; bu nedenle yeni bir durak, üstündekiyle aynı point ve wait değerleriyle başlar. Unity, List<List<Stop>> gibi iç içe listeleri veya bir Dictionary'yi göstermez ya da kaydetmez. Bunun yerine, iç listeyi kendi List<Stop>'una sahip bir Route gibi [Serializable] bir sınıfa sar ve bu sınıflardan oluşan bir liste tut.

challenge icon

Görev

Kolay

Mira ve Tom yıkılmış bir köprüde mahsur kaldı. HUD'da Dialogue.cs dosyasındaki diyalog kutusunu yaz. Sahne, box, speakerText ve lineText alanlarını bağlıyor ve lines adlı bir liste için konuşma hazır.

  • Inspector'da gösterilebilecek iki public string alanı, speaker ve text olan bir Line sınıfı tanımla ve Dialogue'a lines adlı bir public List<Line> ver.
  • Başlangıçta kutu ilk satırı gösterir: konuşmacısını speakerText içinde, metnini de lineText içinde gösterir.
  • Space tuşuna her basışta sonraki satır gösterilir. Bir konuşmada herhangi sayıda satır olabilir; bu yüzden listenin sayısını kullan.
  • Son satırdayken Space tuşuna basmak kutuyu gizler ve Dialogue over mesajını günlüğe yazar. Bundan sonra Space hiçbir şey yapmaz.

Play'e bas, konuşmayı Space tuşuyla oku, ardından Check'e bas.

Kendin dene

using UnityEngine;
using TMPro;

public class Dialogue : MonoBehaviour
{
    public GameObject box;
    public TMP_Text speakerText;
    public TMP_Text lineText;

    void Start()
    {
        // ilk satırı göster
    }

    void Update()
    {
        // Space: sonraki satıra geç veya konuşmayı bitir
    }
}
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