Algunos juegos mantienen un número constante de objetos en la escena, pero es muy común para los personajes, tesoros y otros objetos ser creados y eliminados a la hora de jugar (gameplay). En Unity, un GameObject puede ser creado utilizando la función Instantiate la cual crea una nueva copia de un objeto existente:
public GameObject enemy;
void Start() {
for (int i = 0; i < 5; i++) {
Instantiate(enemy);
}
}
Observe que el objeto del cual la copia es realizada no requiere estar presente en la escena. Es más común usar un prefab arrastrado a una variable pública desde el Project panel (panel del Proyecto) en el editor. También, crear instancias de un GameObject copiará todos los Componentes presentes en el original.
También hay una función Destroy que permite destruir un objeto después que la actualización del frame haya terminado u opcionalmente después de un retraso de tiempo corto:
void OnCollisionEnter(Collision otherObj) {
if (otherObj.gameObject.tag == "Missile") {
Destroy(gameObject,.5f);
}
}
Observe que la función Destroy puede destruir componentes individuales sin afectar el GameObject en sí. Un error común es escribir algo como:
Destroy(this);
…lo cual realmente solo destruirá el componente del script que le llama en vez de destruir el GameObject al cual el script está atado.