Menu
CoddyTech

Inspector'da Listeler

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

[System.Serializable] girdilerinden oluşan bir liste, Inspector'da doldurduğun bir tablodur. Bu bekçi, duraklardan oluşan bir rotayı takip eder ve her durakta, ilgili girdide şu yazdığı 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 Duraklar bölümünü gösterir. Her girdi için Element 0, Element 1 ve benzeri bir açılır bölüm bulunur; her bölümde bir Point ve Wait yer alır. + düğmesi bir girdi ekler, eksi düğmesi seçili girdiyi kaldırır ve satırın solundaki tutamaç, satırı rotada 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. Bir seviye tasarımcısı, betiğe dokunmadan bir bekçiye üç, diğerine on durak verebilir.

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

challenge icon

Görev

Kolay

Mira ve Tom'un konuşmasını her seferinde bir satır göster.

  1. [System.Serializable] özniteliğine sahip, Line adlı bir sınıf tanımla; bu sınıfta speaker ve text adlı public string alanları olsun ve public List<Line> lines; satırını ekle.
  2. Başlangıçta lines[0] öğesini göster: konuşmacısını speakerText içinde, metnini lineText içinde göster.
  3. Boşluk tuşu, lines.Count değerine göre sonraki satırı gösterir. Son satırdan sonra box öğesini gizle ve Dialogue over mesajını günlüğe yaz; ardından Boşluk tuşuna basmak hiçbir şey yapmaz.

“Oyna” düğmesine bas ve Boşluk tuşuyla oku. Ardından “Kontrol et” düğmesine bas.

Kendin dene

using System.Collections.Generic;
using UnityEngine;
using UnityEngine.InputSystem;
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
    }
}

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

Kendi başına pratik yap: Unity playground