Menu
CoddyTech

Destroy

Часть раздела Основы скриптинга в Unity путешествия по Unity на Coddy. Урок 52 из 67.

Destroy(obj) удаляет GameObject из сцены вместе с дочерними объектами. Второй аргумент задаёт задержку: Destroy(obj, 2f) удаляет его через 2 секунды, а скрипт, который вызвал эту функцию, сразу продолжает выполняться. Эта пушка стреляет при нажатии Space, и каждая выпущенная ею пуля исчезает через 2 секунды:

public GameObject bulletPrefab;

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

Передавайте копию, а не префаб: вызов Destroy(bulletPrefab) отклоняется с сообщением Destroying assets is not permitted to avoid data loss. И передавайте GameObject, если имеете в виду объект. Внутри скрипта gameObject — это объект, на котором находится скрипт, поэтому Destroy(gameObject) удаляет этот объект, а Destroy(this) удаляет только скрипт, оставляя объект на месте.

Удаление никогда не происходит мгновенно. Unity удаляет объект в конце текущего кадра, после вызовов Update() и LateUpdate() этого кадра, поэтому строки после Destroy всё равно выполняются, а объект всё ещё можно найти до завершения кадра.

challenge icon

Задание

Средне

Chute выпускает монету каждую секунду; эта часть уже написана. Измени код так, чтобы:

  • каждая монета исчезала через 3 секунды после появления, чтобы одновременно никогда не было больше 3 монет;
  • клавиша Space уничтожала сам желоб, чтобы новые монеты больше не появлялись. Монеты, которые уже появились, всё равно исчезнут вовремя.

Нажми Play, понаблюдай несколько секунд, нажми Space, затем Check.

Попробуйте сами

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: уничтожить жёлоб
    }
}
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Основы скриптинга в Unity