Menu
CoddyTech

Destroy

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

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

Задание

Средне

Уберите старые монеты, а клавишей Space удалите лоток.

  1. Сохраните новую монету в GameObject coin = Instantiate(...);, затем вызовите Destroy(coin, 3f);.
  2. При Input.GetKeyDown(KeyCode.Space) вызовите Destroy(gameObject);. Destroy(this) удалит только скрипт.

Нажмите «Играть»: каждая монета исчезнет через 3 секунды, а клавиша Space остановит появление новых. Затем нажмите «Проверить».

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

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: уничтожить желоб
    }
}

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

Потренируйтесь самостоятельно: Песочница Unity