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.
Görev
KolayMira 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ı,
speakervetextolan birLinesınıfı tanımla ve Dialogue'alinesadlı bir publicList<Line>ver. - Başlangıçta kutu ilk satırı gösterir: konuşmacısını
speakerTextiçinde, metnini delineTextiç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 overmesajı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
}
}
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
1Hiyerarşiler Değil, Bileşenler
Küçük BileşenlerTemel Bir Düşman BetiğiSoyut BileşenlerBirlikte Çalışan BileşenlerÖzet: Modüler Taret4Serileştirilmiş Veriler
Serileştirilebilir SınıflarInspector'da ListelerInspector'da Enum'larÖzet: Ganimet Tablosu7Durum Makineleri
Sınıflar Olarak DurumlarBir Durum MakinesiGeçişlerDüşmanların Yapay ZekâsıTekrar: Kapı Durumları10Proje: Arena Hayatta Kalma
KahramanDüşman Türleri5ScriptableObjects
Veri VarlıklarıSilah İstatistikleriPaylaşılan AyarlarVeri Olarak DalgalarTekrar: Eşya Veritabanı8Yeniden Kullanılabilir Kod
Genişletme MetotlarıGeneric SingletonGeneric YardımcılarTekrar: FindNearest