Da ponovimo:

Klase

Kao što je dosada pominjano, C# je tzv objektno orijantisani progamski jezik. Cilj je da se spakuju povezane funkcionalosti i vrednosti u takozvane objekte (koji nisu ništa drugo nego promenljive). Na primer: sve što se tiče glavnog igrača je u objektu koji najčešće nazivamo player. Sve što se tiče njegovog neprijatelja se čuva u objektu koji obično nazovemo enemy. A šta ako je potrebno da se ima veći broj neprijatelja? Zato je zgodno što koristimo klase. Klasa je u stvari šablon (eng.template) pomoću kojega se prave objekti. Klasa opisuje kako bi objekti te klase trebalo da „izgledaju“ i kako bi trebalo da se ponašaju. Definicija klase počinje ključnom rečju class, nakon toga sledi ime klase. Uobičajeno je da se imena klasa započinju velikim slovom, da bi ih lakše razlikovali od drugih vrsta promenljivih. Nakon imena klase sledi blok uokružen vitičastim zagradama, a u tom bloku se nalazi programski kod sa svime vezanim za tu klasu. Primer:

	class enemy {
int health;

}

Skripte

Kao što je već rečeno, korišćenjem skripti se definiše ponašanje. Skripte se „prikačinju“ za objekte, baš kao i druge komponente, i daju im funkcionalnosti. U opštem slučaju imamo tri koraka prilikom rada sa skriptama:

  1. Kreiranje skripte
  2. Prikačinjanje skripte na jedan ili više objekata igre
  3. Ako je potrebno, postavljanje vrednosti propertija, promenljivih ili nekih osobina potrebih za skriptu
U Unity, na primer, skripta je predstavljena jednom klasom. Naziv skripte mora da ime isto ime kao i klasa u skripti.

Ako želite da kreirate objekat od skripte ili od klase, to je veoma jednostavno. Pošto se skripte tretiraju kao komponente, mogu se jednostavno „prevući“ do objekta u igri, to će da automatski kreira objekat te klase. Ovaj proces se još zove i instantizacija. Rezultat (kreirani objekat) se stoga često naziva i instanca klase.

Kreiranje instanci,

kao na primer instance od objekata igre, se može vršiti kroz C# programski kod. U ovom primeru se prvo treba deklarisati promenljiva tipa class. Nakon toga se radi instantizacija objekta. Time se kreira novi objekat, što se radi pomoću ključne reči new i nakon toga se navede naziv klase.

	Enemy neprijatelj1;
neprijatelj1 = new Enemy();

ove dve linije se mogu napisati i u kratkom obliku:

	Enemy neprijatelj2 = new Enemy();

Dve zagrade na kraju se moraju pisati, jer to nije oznaka za klasu, već je u pitanju konstruktor klase, tj metoda koja se izvršava prilikom kreiranja objekta.

*******************************************************************

GameObject i komponente

Do sada je pominjano da se projekat sastoji od Asset-a i da je naša scena (što je specijalan Asset) sastavljena od objekata igre. A kako se kreira objekat igre? Pomoću kompozicije komponenti.

Sve u Unity se računa kao objekat igre (GameObject). Međutim, GameObject ne radi ništa sam za sebe. Sve funkcionalnosti se ugrađuju pomoću komponenti. Tako, ako želimo da naš GameObjekt ima neku određenu funkcionalnost, onda mu se dodaje odgovarajuća komponenta.

Korišćenje lokalnih komponenti:

Kao što ste mogli dosada primetiti u Inspektoru, objekti se sastoje od raznih komponenti. Tu je uvek komponemta Transform, a opciono mogu biti i druge komponente, kao što su na primer Renderer, Light, Camera, … Skripte su takođe komponente.

(Da se podsetimo: Komponenta koju ima svaki objekat igre je Transform, kojom se upravlja pozicijom, rotacijom i veličinom objekta. )

Pristup komponenti Transform

Izmenama ove komponente se postiže efekat da se objekti kreću po sceni.

Podsetimo se: transform komponenta objekata se sastoji od njegove translacije (ili pozicije), rotacije i od skale. … (engl. position, rotation, scale). Iako ih se može menjati direktno, ipak je lakše koristiti neke ugrađene metode:

  // kretanje po x-osi
transform.Translate(0.05f, 0f, 0f); // float brojevi se pišu sa dodavanjem slova f na kraju
// rotiranje u odnosu na z-osu

transform.Rotate(0f, 0f, 1f);
// skaliranje tako da objekat bude dvostruko veći u svim pravcima

transform.localScale(2f, 2f, 2f);

S obzirom da su Translate() i Rotate() metode, ako navedeni programski kod postavimo u Update(), objekat će da se kontinualno kreće u pozitivnom smeru x-ose i da se istovremeno rotira oko z-ose.

Kako pronaći transform:

S obzirom da svaki objekat igre ima komponentu transform, nema potrebe da je se posebno traži, već se pristupa kao u prethodno navedenom primeru. Ovo je jedina komponenta sa kojom se tako radi! Svima ostalima se pristupa korišćenjem metode GetComponent.

Vežba br.1: u igri kreirati jedan objekat, postaviti da se kreće i okreće

****************************************************************************

Dodeljivanje komponenti objektima igre

Prvi način je dodavanje komponenti u Inspector-u: da se komponenta "prevuče" u inspektor, ili da se u Inspektoru klikne na Add Component i da se doda željena komponenta. Time će se izabrana komponenta dodeliti trenutno selektovanom objektu igre.

Drugi način je dodeljivanje komponenti kroz programski kod: umesto da se prevuče komponenta, kao što je na primer skripta, na željeni GameObject, alternativno se može komponenta dodeliti objektu igre i korišćenjem programskog koda. Za to služi komanda AddComponent

  gameObject.AddComponent<MojaSkripta> ();

Pristupanje komponentama objekata igre

Pristupanje sopstvenim komponentama (unutar objekta igre u kojem smo) vrši se tako što se prvo navede reč gameObject, pa tačka i dalje znate kako to ide:

	MojaSkripta nekaMojaSkripta = gameObject.GetComponent<MojaSkripta>();

(napomena: obratite pažnju da kada se radi o tekućem objektu, počinje se malim slovom: gameObject, ovo je kao korišćenje ključne reči this u Programiranju smile )

Korišćenje metode GetComponent:

U toku rada igrice, sa komponentama se vrši interakcija putem skripti. Prva stvar koju treba obezbediti je da se dobije referenca na komponentu sa kojom se želi raditi.

Metoda GetComponent() kao rezultat vraća prvu komponentu traženog tipa koja se nalazi u istom objektu igre kao i skripta u kojoj je.

Preporuka je da bi ovo trebalo uraditi u Start() a rezultat sačuvati u promenljivoj. Na taj način se ovo neće morati raditi više puta.

Primer:

Light lightComponent; // promenljiva za čuvanje dobijene komponente tipa light 
Start() {
lightComponent=GetComponent<Light>();
lightComponent.type = LightType.Directional;
}

Jednom kada imate referencu na komponentu, dalje možete da joj menjate propertije kroz kod. To se radi tako što se navede naziv promenljive (u kojoj je referenca na komponentu) zatim se navede tačka i nakon toga naziv propertija koji želite da menjate. U navedenom primeru se menja properti type komponemte light da bude Directional.


Last modified: Wednesday, 12 January 2022, 4:48 PM