Destruir
Parte da seção Fundamentos de Scripting no Unity do Journey de Unity da Coddy. Lição 67 de 85.
Destroy(obj) remove um GameObject da cena, incluindo os filhos. Um segundo argumento adia a remoção: Destroy(obj, 2f) o remove 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 criada por ele 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 no lugar.
A destruição nunca acontece na hora. O Unity remove o objeto no fim do quadro atual, depois das chamadas de Update() e LateUpdate() desse quadro. Portanto, as linhas após Destroy ainda são executadas, e ainda é possível encontrar o objeto até o fim do quadro.
Desafio
MédioRemova as moedas antigas e use Espaço para remover a calha.
- Mantenha a nova moeda,
GameObject coin = Instantiate(...);, e depois chameDestroy(coin, 3f);. - Ao pressionar
Input.GetKeyDown(KeyCode.Space), chameDestroy(gameObject);.Destroy(this)removeria apenas o script.
Pressione “Jogar”: cada moeda desaparece após 3 segundos, e Espaço impede que novas moedas apareçam. Depois, pressione “Verificar”.
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
}
}
Todas as lições de Fundamentos de Scripting no Unity
1Fundamentos de C# no Unity
Olá, UnityVariáveisDecimais precisam de um fTexto no ConsoleVariáveis que guardam valoresIf e ElseComparar númerosRevisão: Coletor de Moedas7Laços e Métodos
Repita com forLaços dentro de laçosEscreva um métodoMétodos que respondemArraysRevisão: Escada10Encontrando coisas
Buscar pelo nomeTagsBuscar por tipoReferências são melhores que FindO null do UnityRevisão: moeda mais próxima13Projeto: Desvie dos Blocos
O CorredorBlocos do Céu2Faça-o se mover
Posicione o cuboMova a cada quadroGire a cada segundoDirija com as teclasRecapitulando: dirija o cubo5Vetores
Somando vetoresDireçõesEspaço local e globalVelocidade diagonalDistância entre objetosVector3 é uma structRevisão: piloto de drone8GameObjects e Componentes
Referências no InspectorObter um componenteComponentes ausentesAdicionar um componenteRequireComponentMostrar e ocultarRevisão: Interruptor de luz6Transformações e hierarquia
Pais e filhosIçar a bandeiraEscalaOlhar para as coisasMover-se em direção a um pontoRevisão: Lua em órbita9Projeto: Pegue a Estrela
O PegadorUma Estrela CadentePratique por conta própria: Playground de Unity