Recimo da želim da kreiram jednostavan experience sistem za Unity igru.
Tehnički razmišljano ideja je jednostavna :
1. Kada ubijem neprijatelja dobiću exp poene
2. Ukoliko su ti poeni veći od potrebnih poena za sledeći nivo daću igraču nivo
3. Preneću višak poena u novi nivo
Kako bih ovo realizovao moram da znam 3 bitne informacije :
1. Trenutni nivo igrača
2. Trenutni experience igrača
3. Potrebni experience za sledeći nivo
Odatle ćemo krenuti i sa programiranjem.
Desni klik bilo gde u Project kartici Unity-ja > Create > JavaScript
Ja ću je nazvati "Exp_Player".
Možete da je ostavite gde god želite, svejedno ja moje skripte delim na :
1. generalne skripte - one koje ću koristiti više puta tokom projekta, idu u jedan folder
2. lokalne skripte - one koje su vezane samo za jednu scenu u igri, idu u folder scene
Otvorite skriptu u MonoDevelop-u ili bilo kom programu koji želite/koristite/volite.
Hajmo nazad na one tri bitne informacije. Dakle njih moramo znati i napravićemo tri promenljive :
var current_exp : int ;
var current_lvl : int ;
var required_exp : int ;
Sada kada ove informacije imamo možemo da krenemo dalje. Hajde da zamislimo nešto, čas :
- Recimo da će igra imati više neprijatelja.
- Teži neprijatelji će nam dati više exp poena.
Želimo da kreiramo rešenje koje će biti dinamično - želimo samo da predamo broj exp poena ovoj skripti i pustimo je da završi posao. Dakle taj exp može biti 100, 200, 5000 ...
Napravićemo funkciju koja će primiti jedan argument - broj exp poena koje igrač dobije kad ubije neprijatelja.
function ExperienceAdd(exp : int ){
}
Šta sam sada uradio ? Ako pozovem ovaj kod :
ExperienceAdd(25);
Ovoj funkciji ću dodeliti 25, experience poena u našem slučaju.
Ok, sada kada možemo da dodamo bilo koji broj exp poena našoj funkciji, vreme je da napišemo kod koji će obraditi taj podatak.
Idemo dalje :
- prvo ćemo dodati exp na stari experience
- zatim ćemo proveriti da li je njihov zbir veći od potrebnog broja experienca za novi nivo
- ukoliko jeste daćemo igraču još jedan nivo
- Na kraju, višak exp poena ćemo prebaciti u novi nivo
function ExperienceAdd(exp : int ){
current_exp = current_exp + exp
if (current_exp > required_exp) {
current_lvl ++;
current_exp = current_exp - required_exp ;
}
}
Odradićemo mali test : Svakog puta kada igrač klikne dodaćemo određeni broj poena. Kako bi proverili da li je igrač kliknuo okrenućemo se Update funkciji koja kod izvršava svakog frejma.
function Update(){
if (Input.GetMouseButton(0))
ExperienceAdd(15);
Debug.Log ("Dodato"); // ova linija koda će ispisati u konzoli "Dodato" kada se kod izvrši
}
Celokupna skripta izgleda ovako :
#pragma strict
var current_exp: int;
var current_lvl: int;
var required_exp: int; // Za sledeci nivo
function ExperienceAdd(exp: int) {
current_exp += exp; // isto što i current_exp = current_exp + exp;
if (current_exp > required_exp) {
current_lvl++;
current_exp -= required_exp; // isto što i current_exp = current_exp - required_exp;
}
}
function Update() {
if (Input.GetMouseButtonDown(0))
ExperienceAdd(15);
Debug.Log("Dodato");
}
Okačite skriptu na kameru i u inspektoru podesite parametre :
po želji. Njih takođe možete učitati iz sejva, resetovati ih pri početku igre ili šta god. Obratite samo pažnju, sve izmene dok testirate igru (kada pritisnete "Play") neće ostati permanentne i resetovaće se nakon testa.
Odavde ovaj sistem može da se proširi, recimo :
- ista skripta može da ima funkciju koja će oduzimati experience kada lik umre/doda debuff
- možemo imati podatak potrebnog experience-a za svaki nivo do određenog nivoa
- možemo imati novu funkciju koja će biti zadužena za dodavanje novih talenata, atributa, pasivnih statusa igraču i tu funkciju možemo da pozovemo u funkciji kada igrač dobije novi nivo
...
Toliko za sada, možda proširim tutorijal nekada u budućnosti atributima, talentima i slično.
|