Menu
CoddyTech

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.

challenge icon

Görev

Orta

Yığıcı, oluşturduğu kutuları takip etmelidir:

  • Kutuları, adı boxes olan özel bir List<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ğin Boxes: 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
    }
}
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 Script Yazmanın Temelleri bölümündeki tüm dersler