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 всё ещё выполняются, а объект всё ещё можно найти, пока кадр не завершится.
Задание
СреднеУберите старые монеты, а клавишей Space удалите лоток.
- Сохраните новую монету в
GameObject coin = Instantiate(...);, затем вызовитеDestroy(coin, 3f);. - При
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
1Основы C# в Unity
Привет, UnityПеременныеДля дробных чисел нужна fТекст в консолиПеременные, которые запоминаютЕсли и иначеСравнение чиселПовторение: сборщик монет7Циклы и методы
Повторение с forЦиклы внутри цикловНапишите методМетоды, которые возвращают значениеМассивыПовторение: лестница10Поиск объектов
Поиск по имениТегиПоиск по типуСсылки лучше поискаNull в UnityПовторение: ближайшая монета13Проект: уворачиваемся от блоков
БегунБлоки с неба2Заставь двигаться
Размести кубДвигай каждый кадрПоворачивай каждую секундуУправляй клавишамиПовторение: веди куб5Векторы
Сложение векторовНаправленияЛокальное и мировое пространствоСкорость по диагоналиРасстояние между объектамиVector3 — это структураПовторение: пилот дрона8Игровые объекты и компоненты
Ссылки в InspectorПолучение компонентаОтсутствующие компонентыДобавление компонентаRequireComponentПоказ и скрытиеПовторение: выключатель света11Префабы и создание объектов
Префабы и InstantiateСпавн по таймеруСпавн в сеткеСписки объектовУбрать последний созданныйDestroyСлучайный спавнПовторение: фейерверкиПотренируйтесь самостоятельно: Песочница Unity