logo

Entendre els prefabricats i la instanciació

Instanciar i destruir personatges o objectes és molt habitual en qualsevol joc. Instanciar significa portar l'objecte a l'existència. Els objectes apareixen o es generen o es generen en un joc, els enemics moren, els elements de la GUI desapareixen i les escenes es carreguen tot el temps del joc.

Els prefabricats són molt útils quan voleu crear una instancia de GameObjects complicats o una col·lecció de GameObjects en temps d'execució. En comparació amb la creació de GameObjects des de zero amb codi, la instanciació de prefabricats amb codi és millor i té molts avantatges.

Entenem què són els prefabricats; ja que els prefabricats es consideren importants per entendre com funciona la instanciació a Unity.

Prefabricats són com els plànols d'un GameObject. Així que podem dir, els prefabricats són una còpia d'un GameObject que es pot duplicar i posar en una escena, encara que no existia quan s'estava fent l'escena; és a dir, els prefabricats es poden utilitzar per generar GameObjects de manera dinàmica.

Creem un prefabricat; per a això, heu d'arrossegar el GameObject desitjat des de la jerarquia de l'escena als recursos del projecte.

Entendre els prefabricats i la instanciació

Ara, per crear una instancia d'un GameObject, cridem al mètode Instantiate() al nostre script. Aquest mètode està disponible a MonoBehaviour, pren un GameObject com a paràmetre, de manera que sap quin GameObject crear o duplicar. També té diferents substitucions per canviar la transformació de l'objecte recentment creat, així com la criança.

Ara creeu un nou script anomenat Instantiator.cs i copieu-hi el codi següent.

 using System.Collections; using System.Collections.Generic; using UnityEngine; public class Instantiator : MonoBehaviour { public GameObject Diamond; // Update is called once per frame void Update() { if (Input.GetKeyDown(KeyCode.Space)) { Instantiate(Diamond); } } } 

Al programa anterior, hem utilitzat el mètode GetKeyDown de la classe Input per comprovar si el reproductor ha premut un botó específic durant l'últim fotograma. El mètode GetKeyDown() retorna true si la tecla especificada per l'enumeració KeyCode (que s'utilitza per llistar totes les tecles possibles en un teclat estàndard) es prem en aquest marc.

Deseu l'script. I ara, creeu un GameObject buit fent clic amb el botó dret a l'escena des de la pestanya Jerarquia.

Entendre els prefabricats i la instanciació

Adjunteu aquest fitxer d'script (Instantiator.cs) al Component de GameObject acabat de crear des de la pestanya Inspector.

Ara, a la variable Diamond arrossegueu aquest prefabricat que hem creat.

Entendre els prefabricats i la instanciació

Quan executeu el joc ara, prement la barra espaiadora es crearà un nou objecte Diamond idèntic al que hem utilitzat per crear el prefabricat. Podeu veure que cada diamant es crea a la jerarquia d'objectes. La raó per la qual no podeu veure'ls aparèixer al joc és que, de moment, tots s'estan creant exactament l'un sobre l'altre. Però podeu verificar-ho des de la pestanya Jerarquia. Cada vegada que premeu una barra espaiadora, es mostrarà a la pestanya com un diamant (clon).

Entendre els prefabricats i la instanciació