Menu
CoddyTech

Yok Etme

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

Destroy(obj), alt nesneler de dâhil olmak üzere bir GameObject'i sahneden kaldırır. İkinci bir argüman, işlemi geciktirir: Destroy(obj, 2f), nesneyi şu andan 2 saniye sonra kaldırır ve bu çağrıyı yapan 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ı gönderin: Destroy(bulletPrefab) çağrısı, Destroying assets is not permitted to avoid data loss. hatasıyla reddedilir. Nesneyi kastettiğinizde bir GameObject gönderin. Bir betiğin içinde gameObject, betiğin bağlı olduğu nesnedir. Bu nedenle Destroy(gameObject) o nesneyi kaldırırken Destroy(this) yalnızca betiği kaldırır ve nesneyi yerinde bırakır.

Destroy işlemi hiçbir zaman anında gerçekleşmez. Unity, nesneyi geçerli karenin sonunda, o karenin Update() ve LateUpdate() çağrılarından sonra kaldırır. Bu nedenle Destroy satırından sonraki satırlar çalışmaya devam eder ve kare sona erene kadar nesne hâlâ bulunabilir.

challenge icon

Görev

Orta

Eski madeni paraları temizle ve Space tuşunun oluğu kaldırmasını sağla.

  1. Yeni madeni parayı, GameObject coin = Instantiate(...);, koru ve ardından Destroy(coin, 3f); çağır.
  2. Input.GetKeyDown(KeyCode.Space) durumunda Destroy(gameObject); çağır. Destroy(this) yalnızca betiği kaldırır.

“Oyna” düğmesine bas: her madeni para 3 saniye sonra kaybolur ve Space yeni madeni paraların oluşmasını durdurur. Ardından “Kontrol et” düğmesine 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
    }
}

Unity'de Script Yazmanın Temelleri bölümündeki tüm dersler

Kendi başına pratik yap: Unity playground