Instanciranje i uništavanje likova ili objekata vrlo je uobičajeno u svakoj igri. Instanciranje znači dovođenje objekta u postojanje. Objekti se pojavljuju ili rađaju ili generiraju u igri, neprijatelji umiru, GUI elementi nestaju, a scene se učitavaju cijelo vrijeme u igri.
Prefabovi su vrlo korisni kada želite instancirati komplicirane GameObjects ili kolekciju GameObjects tijekom izvođenja. U usporedbi s izradom GameObjects od nule pomoću koda, instanciranje montažnih objekata pomoću koda je bolje i ima mnoge prednosti.
Shvatimo što su montažne zgrade; budući da se prefabovi smatraju važnima za razumijevanje kako instanciranje radi u Unityju.
Montažne konstrukcije su poput nacrta GameObject-a. Dakle, možemo reći, Prefabs su kopija GameObject-a koji se može duplicirati i staviti u scenu, čak i ako nije postojao kada je scena napravljena; drugim riječima, prefabovi se mogu koristiti za dinamičko generiranje GameObjects.
Napravimo montažnu; za ovo trebate povući željeni GameObject iz svoje hijerarhije scene u Assets projekta.
Sada, da bismo instancirali GameObject, pozivamo Instantiate() metodu u našoj skripti. Ova je metoda dostupna u MonoBehaviouru, uzima GameObject kao parametar, tako da zna koji GameObject stvoriti ili duplicirati. Također ima različita nadjačavanja za promjenu transformacije novoinstanciranog objekta, kao i roditeljstvo.
Sada stvorite novu skriptu pod nazivom Instantiator.cs i u nju kopirajte sljedeći kod.
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); } } }
U gornjem programu koristili smo metodu GetKeyDown klase Input za provjeru je li igrač pritisnuo određeni gumb tijekom posljednjeg okvira. Metoda GetKeyDown() vraća true ako je tipka određena enumom KeyCode (koja se koristi za popis svih mogućih tipki na standardnoj tipkovnici) pritisnuta u tom okviru.
Spremite skriptu. A sada stvorite prazan GameObject desnim klikom na scenu na kartici Hijerarhija.
Priložite tu datoteku skripte (Instantiator.cs) novostvorenoj komponenti GameObject s kartice Inspector.
Sada, u varijablu Diamond povucite taj prefab koji smo stvorili.
Kada sada pokrenete igru, pritiskom na razmaknicu stvorit ćete novi Diamond objekt identičan onom koji smo koristili za izradu prefaba. Možete vidjeti da je svaki dijamant stvoren u hijerarhiji objekata. Razlog zbog kojeg ih ne možete vidjeti u igri je taj što se trenutno svi stvaraju jedan preko drugog. Ali to možete provjeriti na kartici Hijerarhija. Svaki put kada pritisnete razmaknicu, prikazat će se na kartici kao dijamant (klon).