Comprensión de los prefabricados y la creación de instancias
Instanciar y destruir objetos se considera muy importante durante el juego. Instanciar simplemente significa traer a la existencia. Los elementos aparecen o "engendran" en el juego, los enemigos mueren, los elementos de la GUI desaparecen y las escenas se cargan todo el tiempo en el juego. Saber cómo deshacerse adecuadamente de los objetos innecesarios y cómo traerlos se vuelve aún más esencial.
Primero entendamos lo que prefabsson. Los prefabricados se consideran importantes para comprender cómo funciona la creación de instancias en Unity.
Prefabs son como blueprintsde un GameObject. Los prefabricados son, en cierto modo, uncopyde un GameObject que se puede duplicar y poner en una escena, incluso si no existía cuando se estaba creando la escena; en otras palabras, los prefabricados se pueden utilizar paradynamically generate GameObjects.
Para crear un prefabricado, simplemente tiene que arrastrar el GameObject deseado de su jerarquía de escena al proyecto. Assets.
Ahora, para crear una instancia de un GameObject, llamamos al Instantiate()método en nuestro script. Este método, definido enMonoBehaviour, toma un GameObject como parámetro, por lo que sabe qué GameObject crear / duplicar. También tiene varias anulaciones para cambiar la transformación del objeto recién instanciado, así como la crianza.
Intentemos instanciar un nuevo hexagon siempre que el Space se presiona la tecla.
Cree un nuevo script llamado Instantiatory ábrelo. En elUpdate método, escriba el código que se proporciona a continuación.
Aquí, estamos usando el GetKeyDown método del Inputclass para verificar si el jugador presionó un botón específico durante el último cuadro. Como queremos que siga comprobando, lo colocamos enUpdate, que se ejecuta 60 veces por segundo. El método GetKeyDown devuelvetrue si la clave especificada por el KeyCode enum (que enumera todas las teclas posibles en un teclado estándar) se presiona en ese marco.
public class Instantiator : MonoBehaviour {
public GameObject Hexagon;
// Update is called once per frame
void Update () {
if (Input.GetKeyDown(KeyCode.Space)) {
Instantiate(Hexagon);
}
}
}
La declaración pública de GameObject en la parte superior crea un espacio similar al que hicimos para el Rigidbody2D en nuestras lecciones anteriores. Esta ranura solo aceptaprefabs (en tiempo de editor) y gameObjects (en tiempo de ejecución), sin embargo.
Guarde el script y deje que se compile. Una vez hecho esto, cree un nuevoempty GameObject yendo al menú contextual de la jerarquía de objetos y seleccionando Create Empty.
Nombra este Objeto con algo reconocible como Instatiator Objecty adjuntarle nuestro script recién creado. En la ranura que aparece para GameObject, arrastre el prefabricado que creamos.
Si ejecutamos el juego ahora, al presionar la barra espaciadora se creará un nuevo objeto Hexagon idéntico al que usamos para crear el prefabricado. Puede ver que se crea cada hexágono en la jerarquía de objetos. La razón por la que no puedes verlos aparecer en el juego es porque, por el momento, todos están siendo creados.exactly uno sobre el otro.
En nuestra próxima lección, entenderemos el concepto de destrucción de objetos.