Menu
CoddyTech

Yok Etme

Coddy'nin Unity Journey'sinin Unity'de Script Yazmanın Temelleri bölümünün bir parçası. Ders 52 / 67.

Destroy(obj), alt nesneler de dâhil olmak üzere bir GameObject'i sahneden kaldırır. İkinci bir argüman gecikme sağlar: Destroy(obj, 2f) nesneyi şu andan 2 saniye sonra kaldırır ve bunu çağıran betik hemen çalışmaya devam eder. Bu top Space tuşuna basıldığında ateş eder ve oluşturduğu her mermi 2 saniye sonra yok olur:

public GameObject bulletPrefab;

void Update()
{
    if (Input.GetKeyDown(KeyCode.Space))
    {
        GameObject bullet = Instantiate(bulletPrefab, transform.position, Quaternion.identity);
        Destroy(bullet, 2f);
    }
}

Prefab'i değil, kopyayı iletin: Destroy(bulletPrefab) çağrısı Destroying assets is not permitted to avoid data loss. hatasıyla reddedilir. Nesneyi kastettiğinizde bir GameObject iletin. Bir betiğin içindeki gameObject, betiğin bağlı olduğu nesnedir; dolayısıyla Destroy(gameObject) bu nesneyi kaldırırken Destroy(this) yalnızca betiği kaldırır ve nesneyi olduğu gibi bırakır.

Yok etme işlemi asla anında gerçekleşmez. Unity nesneyi, geçerli karedeki Update() ve LateUpdate() çağrılarından sonra, karenin sonunda kaldırır; bu nedenle Destroy sonrasındaki satırlar yine çalışır ve kare sona erene kadar nesne hâlâ bulunabilir.

challenge icon

Görev

Orta

Chute her saniyede bir madeni para bırakıyor; bu kısım yazılmış durumda. Şöyle değiştir:

  • her madeni para göründükten 3 saniye sonra kaybolsun, böylece aynı anda asla 3'ten fazla madeni para olmasın;
  • Space oluğun kendisini yok etsin, böylece artık başka madeni para gelmesin. Dışarı çıkmış olan madeni paralar yine zamanında kaybolsun.

Play'e bas, birkaç saniye izle, Space'e bas, ardından Check'e bas.

Kendin dene

using UnityEngine;

public class CoinChute : MonoBehaviour
{
    public GameObject coinPrefab;
    public float interval = 1f;
    float timer;

    void Update()
    {
        timer += Time.deltaTime;
        if (timer >= interval)
        {
            Instantiate(coinPrefab, transform.position, Quaternion.identity);
            timer -= interval;
        }

        // Space: oluğu yok et
    }
}
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