Menu
CoddyTech

Niszczenie

Część sekcji Podstawy skryptów w Unity ścieżki Unity w Coddy. Lekcja 67 z 85.

Destroy(obj) usuwa GameObject ze sceny wraz z jego dziećmi. Drugi argument pozwala opóźnić usunięcie: Destroy(obj, 2f) usuwa obiekt za 2 sekundy, a skrypt, który wywołał tę funkcję, działa dalej od razu. To działo strzela po naciśnięciu spacji, a każda wystrzelona przez nie kula znika 2 sekundy później:

public GameObject bulletPrefab;

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

Przekaż kopię, a nie prefabrykat: Destroy(bulletPrefab) zostanie odrzucone z komunikatem Destroying assets is not permitted to avoid data loss. Przekaż też GameObject, jeśli chodzi ci o obiekt. Wewnątrz skryptu gameObject oznacza obiekt, na którym znajduje się skrypt, więc Destroy(gameObject) usuwa ten obiekt, a Destroy(this) usuwa tylko skrypt i pozostawia obiekt na miejscu.

Usunięcie nigdy nie następuje natychmiast. Unity usuwa obiekt na końcu bieżącej klatki, po wywołaniach Update() i LateUpdate() w tej klatce, więc linie kodu po Destroy nadal się wykonują, a obiekt można znaleźć do końca klatki.

challenge icon

Wyzwanie

Średni

Usuń stare monety i pozwól, by spacja usuwała zsyp.

  1. Zachowaj nową monetę: GameObject coin = Instantiate(...);, a następnie wywołaj Destroy(coin, 3f);.
  2. Po naciśnięciu Input.GetKeyDown(KeyCode.Space) wywołaj Destroy(gameObject);. Destroy(this) usunęłoby tylko skrypt.

Naciśnij „Graj”: każda moneta znika po 3 sekundach, a spacja zatrzymuje tworzenie kolejnych. Następnie naciśnij „Sprawdź”.

Spróbuj swoich sił

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: zniszcz zsyp
    }
}

Wszystkie lekcje w sekcji Podstawy skryptów w Unity

Poćwicz samodzielnie: Edytor online Unity