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 всё равно выполняются, а объект всё ещё можно найти до завершения кадра.
Задание
Средне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: уничтожить жёлоб
}
}
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Основы скриптинга в Unity
1Ваш первый скрипт
Привет, UnityРазместите кубДвигайте каждый кадрПоворачивайте каждую секундуУправляйте клавишамиПовторение: управляйте кубом2Инспектор
Поля инспектораSerializeFieldЧисла с плавающей точкой и MathfАтрибуты инспектораПовторение: лифт5Преобразования и иерархия
Родители и детиМасштабПосмотри на объектыДвигайся к точкеПовторение: Луна на орбите6Игровые объекты и компоненты
Ссылки в InspectorПолучение компонентаОтсутствующие компонентыДобавление компонентаRequireComponentПоказать и скрытьПовторение: выключатель света9Префабы и создание объектов
Префабы и InstantiateСоздание объектов по таймеруСоздание объектов в сеткеСписки объектовDestroyСлучайное создание объектовПовторение: фейерверки