Instantiate metoda koristi se za stvaranje novih instanci objekata tijekom pokretanja igre. To jest koristimo je za dodavanje objekata u scenu poput neprijatelja, efekata...
Istancirani objekti su najčešće prefabovi, ali mogu biti i objekti koji se već nalaze u sceni.
U sljedećem primjeru ćemo stvoriti objekt pri pokretanju igre na istoj poziciji i rotaciji kao prefab.
[SerializeField] GameObject objekt1; // Prefab koji želite instancirati
void Start()
{
Instantiate(objekt1); // Istancira objekt1 na njegovoj originalnoj poziciji i rotaciji
}
Prilikom instanciranja objekta, možemo mu odrediti poziciju i rotaciju.
Varijabla određeniObjekt je prefab ili objekt u sceni koji istanciramo.
Varijabla pozicija je pozicija na kojoj će se stvoriti istancirani objekt.
Varijabla rotacija je rotacija koju će imati istancirani objekt.
Instantiate(određeniObjekt, pozicija, rotacija);
U sljedećem primjeru ćemo istancirati objekt pri pokretanju igre. Istancirani objekt će imati drugačiju poziciju i rotaciju od prefaba.
[SerializeField] GameObject objekt1; // Referenca na objekt1
private Vector3 pozicijaStvaranja = new Vector3(2, 42, 12); // Pozicija gdje će se kreirati objekt
private Quaternion rotacijaStvaranja = Quaternion.Euler(12, 43, 120); // Rotacija objekta
void Start()
{
Instantiate(objekt1, pozicijaStvaranja, rotacijaStvaranja);
}
Ako želimo da nam istancirani objekt ima drugačiju poziciju, ali istu rotaciju ko prefab, na mjestu rotacije pišemo Quaternion.identity.
[SerializeField] GameObject objekt1; // Referenca na objekt1
void Start()
{
Instantiate(objekt1, new Vector3(2, 42, 12), Quaternion.identity);
}
U sljedećem primjeru pokazat ćemo vam kako upravljati komponentama istanciranog objekta. U ovom primjeru naknadno ćemo mu promjeniti poziciju i komponentu MeshRenderer.
[SerializeField] GameObject objekt1;
[SerializeField] GameObject objekt2;
void Start()
{
// Istanciranje i deklariranje objekta
GameObject kloniraniObjekt = Instantiate(objekt1, new Vector3(2, 42, 12), Quaternion.identity);
kloniraniObjekt.GetComponent<MeshRenderer>().enabled = false; // Isključujemo MeshRenderer komponentu kod kloniranog objekta
kloniraniObjekt.transform.position = objekt2.transform.position; // poziciju kloniranog objekta naknadno postavljamo na poziciju objekt2
}