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.
Görev
KolayMira ve Tom'un konuşmasını her seferinde bir satır göster.
[System.Serializable]özniteliğine sahip,Lineadlı bir sınıf tanımla; bu sınıftaspeakervetextadlı public string alanları olsun vepublic List<Line> lines;satırını ekle.- Başlangıçta
lines[0]öğesini göster: konuşmacısınıspeakerTextiçinde, metninilineTextiçinde göster. - Boşluk tuşu,
lines.Countdeğerine göre sonraki satırı gösterir. Son satırdan sonraboxöğesini gizle veDialogue overmesajı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
1Kalıtım Değil, Bileşenler
Küçük BileşenlerTemel Düşman Script'iSoyut BileşenlerBirlikte Çalışan BileşenlerTekrar: Modüler TaretTekrar: Çift Namlulu Top4Serileştirilmiş Veriler
Serileştirilebilir SınıflarInspector'da ListelerInspector'da Enum'larTekrar: Ganimet TablosuTekrar: Ganimeti At2Unity'de Arayüzler
IDamageableArayüzler ve TryGetComponentGetComponentsÖzet: Etkileşim TuşuÖzet: Erişim Mesafesindeki En Yakın5ScriptableObjects
Veri VarlıklarıSilah İstatistikleriOrtak AyarlarRüzgârı KaydetVeri Olarak DalgalarTekrar: Eşya VeritabanıTekrar: Dükkândan Satın Al8Yeniden Kullanılabilir Kod
Genişletme MetotlarıGeneric SingletonGeneric YardımcılarTekrar: FindNearestKendi başına pratik yap: Unity playground