C# Unity UI Unity C#
Početna stranica
Polazna lekcija
Prava pristupa
Time
GameObject
Destroy i SetActive
Mathf
Input
SceneManagement
UI programiranje
Audio source
Vektori
Kvaternion
Transform
Instantiate
RigidBody
OnTrigger
OnCollision
RayCast
PlayerPref

GameObject

GameObject je glavna Unity klasa za sve objekte/entitete u unity sceni.

Primjeri GameObject su: kamera, kocka, svjetla...

Svaki GameObject sadrži određene komponente (transform, collider...) kojima možemo pristupiti i putem koda.


Traženje objekta

Objekt stvaramo unutar skripte tako što prvo definiramo pravo pristupa (private ili public) zatim napišemo GameObject te ga nazovemo po želji.

Primjer:


private GameObject objekt1;
public GameObject objekt2;
            

Ako smo objekt označili s public ili [SerializeField] dovoljno je otići u Unity te povući željeni objekt iz hierarchya na predviđeno mjesto u skripti koja se nalazi pod Inspectorom na objektu na kojem je skripta. Na taj način će C# znati o kojem se objektu radi kada mu mjenjamo svojstva unutar skripte.

Ako smo objekt označili s private onda nam objekt nije vidljiv unutar Inspectora te ga je potrebno naći unutar skripte uz pomoć imena ili taga. Pronalaženje obično pišemo unutar void Start() jer je to metoda koja se poziva prilikom pokretanja scene nakon što je objekt stvoren. Iz tog razloga se ne koristimo metodom OnAwake() za pronalaženje objekta putem taga ili imena.

Primjer:


private GameObject objekt1;
private GameObject objekt2;

void Start()
{
    objekt1 = GameObject.FindWithTag("TagObjekta"); //Pronalaženje objekta uz pomoć taga
    objekt2 = GameObject.Find("ImeObjekta"); //Pronalaženje objekta uz pomoć imena
}
            


Pristupanje koponentama

Kada pristupamo komponenti nekog objekta prvo napišemo naziv objekta čijim komponentama želimo pristupiti, a zatim dohvatimo tu komponentu uz pomoć GetComponent<imeKomponente>().

Sintaksa:


objekt1.GetComponent<imeKomponente>().svojstvoKomponente = promjena;
            

U sljedećem primjeru pristupit ćemo komponenti MeshRenderer te ćemo je uz pomoć koda isključiti pa odmah nakon toga uključiti.

Primjer:


public GameObject objekt1;

void Start()
{
    objekt1.GetComponent<MeshRenderer>().enabled = false; //Ovdje isključujemo MeshRenderer objektu kojeg smo unutar skripte nazvali objekt1
    objekt1.GetComponent<MeshRenderer>().enabled = true; //Ovdje uključujemo MeshRenderer objektu kojeg smo unutar skripte nazvali objekt1      
}
            

U sljedećem primjeru pristupit ćemo komponeti Rigidbody te ćemo joj promjeniti brzinu za naprijed.

O ovoj komponenti ćemo posebno učiti u jednoj od nadolazećih lekcija.

Primjer:


public GameObject objekt1;

void Start()
{
    objekt1.GetComponent<Rigidbody>().velocity = this.transform.forward * 20; //mjenjamo brzinu za naprijed od Rigidbodya na objektu1  
}
            

Ako se skripta nalazi na objektu čijim komponentama želimo pristupiti umjesto naziva objekta napišemo this.

Primjer:


void Start()
{
    this.GetComponent<MeshRenderer>().enabled = false; //Ovdje isključujemo MeshRenderer objektu na kojem je skripta
    this.GetComponent<MeshRenderer>().enabled = true; //Ovdje uključujemo MeshRenderer  objektu na kojem je skripta
}
            

Isto bi bilo i da smo napiasli samo GetComponent<MeshRenderer>().enabled = false; bez this.


Referenca

Kontinuirano korištenje GetComponent<ImeKomponente>() za svaki put kada želimo izmjeniti svojstva komponente određenog objekta je procesorski zahtjevno.

Iz takvog razloga komponentu određenog objekta spremamo pod referencu.

U sljedećem primjeru imamo privatnu komponentu MeshRenderer. Unutar void Start stavljamo da se ta komponenta MeshRenderer odnosi na MeshRenderer objekta kojeg smo unutar skripte nazvali objekt1. Nakon toga isključujemo MeshRenderer tog objekta.

Objekt1 pronalazimo putem imena u ovom primjeru.

Primjer:

              
private GameObject objekt1;
private MeshRenderer meshR;

void Start()
{
    objekt1 = GameObject.Find("kocka"); //objekt1 se unutar scene zove kocka
    meshR = objekt1.GetComponent<MeshRenderer>();
    meshR.enabled = false;
}               
            


Iznimka

Jedina komponenta kojoj možemo pristupiti bez korištenja GetComponent<imeKomponente>() je transform.

O njoj ćemo detaljnije učiti u jednoj od sljedećih lekcija.


Prijašnje

Sljedeće