Nesne Listeleri
Coddy'nin Unity Journey'sinin Unity'de Script Yazmanın Temelleri bölümünün bir parçası. Ders 51 / 67.
Bir dizinin uzunluğu sabittir ve oluşturulduğunda belirlenir. Bir oluşturucu, önceden kaç nesne oluşturacağını bilemez; bu yüzden onları büyüyen bir C# dizisi olan List<T> içinde tutar. System.Collections.Generic içinde bulunur ve T, tuttuğu öğenin türüdür. Bu çeşme oluşturduğu her parayı hatırlar:
using System.Collections.Generic;
using UnityEngine;
public class CoinFountain : MonoBehaviour
{
public GameObject coinPrefab;
List<GameObject> coins = new List<GameObject>();
void Update()
{
if (Input.GetKeyDown(KeyCode.Space))
{
GameObject coin = Instantiate(coinPrefab, transform.position, Quaternion.identity);
coins.Add(coin);
Debug.Log(coins.Count + " coins");
}
}
}Add bir öğeyi sona ekler ve Count kaç öğe olduğunu söyler; dizilerde bunun karşılığı Length özelliğidir. Okuma, dizilerdeki gibi çalışır: coins[0] ilk paradır ve foreach (GameObject c in coins) tüm paraları sırayla dolaşır. coins.Remove(coin) o öğeyi listeden çıkarır, coins.RemoveAt(0) ise ilk öğeyi çıkarır; ondan sonraki öğeler bir sıra yukarı kayar.
Listenin kendisi new ile oluşturulmalıdır. List<GameObject> coins; şeklinde yazılan bir alan null değerini tutar ve ilk Add çağrısı NullReferenceException hatasıyla durur.
Görev
OrtaYığıcı, oluşturduğu kutuları takip etmelidir:
- Kutuları, adı
boxesolan özel birList<GameObject>alanında tut. - Her tıklama, döndürülmemiş bir kutu oluşturur ve onu listeye ekler. Kutu, yığıcının konumuna, listede zaten bulunan her kutu için x ekseninde 1.5 eklenerek yerleştirilir: ilki yığıcının konumuna, sonraki 1.5 birim sağına ve böyle devam eder.
- Space, en yeni kutuyu geri alır:
SetActive(false)ile gizle ve listeden kaldır. Hiç kutu yoksa Space hiçbir şey yapmaz. - Listedeki her değişiklikten sonra
Boxes:ve kutu sayısını, örneğinBoxes: 3şeklinde kaydet.
Play'e bas, tıkla ve Space'e bas, ardından Check'e bas.
Kendin dene
using UnityEngine;
public class BoxStacker : MonoBehaviour
{
public GameObject boxPrefab;
// boxes: private bir List<GameObject>
void Update()
{
// Click: listedeki her kutu için 1.5 daha sağda bir kutu oluştur ve onu listeye ekle
// Space: en yeni kutuyu gizle ve listeden çıkar
// Her değişiklikten sonra "Boxes: " ve kutu sayısını günlüğe yaz
}
}
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Unity'de Script Yazmanın Temelleri bölümündeki tüm dersler
1İlk Betiğiniz
Merhaba, UnityKüpü YerleştirHer Karede Hareket EtHer Saniye DönTuşlarla Yön VerÖzet: Küpü Sür4Vektörler
Vektörleri ToplamaYönlerYerel ve Dünya UzayıÇapraz HızNesneler Arasındaki MesafeVector3 Bir YapıdırÖzet: Drone Pilotu7Proje: Yıldızı Yakala
YakalayıcıDüşen Bir Yıldız5Dönüşümler ve Hiyerarşi
Ebeveynler ve ÇocuklarÖlçekNesnelere BakışBir Noktaya Doğru HareketTekrar: Yörüngedeki Ay6GameObject'ler ve Bileşenler
Inspector'daki ReferanslarBir Bileşen AlEksik BileşenlerBir Bileşen EkleRequireComponentGöster ve GizleÖzet: Işık Anahtarı9Prefab'ler ve Nesne Oluşturma
Prefab'ler ve InstantiateZamanlayıcıyla Nesne OluşturmaIzgarada Nesne OluşturmaNesne ListeleriYok EtmeRastgele Nesne OluşturmaÖzet: Havai Fişekler