Menu
CoddyTech

Niszczenie obiektów

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

Destroy(obj) usuwa GameObject ze sceny wraz z jego dziećmi. Drugi argument opóźnia usunięcie: Destroy(obj, 2f) usuwa go 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. Jeśli chodzi o obiekt, przekaż GameObject. W skrypcie gameObject oznacza obiekt, do którego jest przypisany 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 instrukcje po Destroy nadal się wykonują, a obiekt nadal można znaleźć do końca klatki.

challenge icon

Wyzwanie

Średni

Chute upuszcza monetę co sekundę; ta część jest już napisana. Zmień kod tak, aby:

  • każda moneta znikała 3 sekundy po pojawieniu się, dzięki czemu nigdy nie ma więcej niż 3 monet naraz;
  • naciśnięcie spacji niszczyło sam zsyp, aby nie pojawiały się kolejne monety. Monety, które już wypadły, nadal znikają w odpowiednim czasie.

Naciśnij Play, obserwuj przez kilka sekund, naciśnij spację, a następnie Check.

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 zrzutnię
    }
}
quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Podstawy skryptów w Unity