Menu
CoddyTech

Destruir

Parte da seção Noções básicas de scripting no Unity do Journey de Unity da Coddy. Lição 52 de 67.

Destroy(obj) remove um GameObject da cena, incluindo os filhos. Um segundo argumento atrasa a remoção: Destroy(obj, 2f) remove o objeto daqui a 2 segundos, e o script que chamou a função continua imediatamente. Este canhão dispara ao pressionar Espaço, e cada bala que ele cria desaparece 2 segundos depois:

public GameObject bulletPrefab;

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

Passe a cópia, não o prefab: Destroy(bulletPrefab) é recusado com Destroying assets is not permitted to avoid data loss. E passe um GameObject quando quiser se referir ao objeto. Dentro de um script, gameObject é o objeto ao qual o script está associado, então Destroy(gameObject) remove esse objeto, enquanto Destroy(this) remove apenas o script e deixa o objeto intacto.

A destruição nunca acontece na mesma hora. O Unity remove o objeto no fim do quadro atual, depois das chamadas de Update() e LateUpdate() desse quadro, então as linhas depois de Destroy ainda são executadas e o objeto ainda pode ser encontrado até o fim do quadro.

challenge icon

Desafio

Médio

A Chute solta uma moeda a cada segundo; essa parte já está feita. Altere-a para que:

  • cada moeda desapareça 3 segundos depois de aparecer, para que nunca haja mais de 3 moedas ao mesmo tempo;
  • a tecla Space destrua a própria chute, para que nenhuma outra moeda apareça. As moedas que já saíram ainda desaparecem no tempo certo.

Pressione Play, observe por alguns segundos, pressione Space e, em seguida, Check.

Experimente você mesmo

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: destrua a calha
    }
}
quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Noções básicas de scripting no Unity