să presupunem că faceți un joc video de rol și aveți nevoie de o modalitate mai ușoară de a atribui statistici, proprietăți și multe altele diferitelor articole. În timp ce puteți utiliza prefabricate Unity pentru a face acest lucru și apoi modificați valorile fiecărei copii individuale a prefabricatului, acesta este un mod incomod de a rezolva sarcina. Pentru început, această metodă folosește mai mult din memoria dvs., lucru pe care ar putea fi necesar să îl conservați dacă intenționați să faceți un joc mare. În plus, dacă trebuie să faceți modificări la obiectele din joc, pur și simplu nu este la fel de eficient să faceți acest lucru atunci când există mai multe copii ale prefabricatelor situate în jur. Acest lucru devine o problemă mai ales dacă aveți o echipă mai mare cu care să lucrați, așa că veți dori să faceți lucrurile mai ușor de schimbat pentru alți membri ai echipei. Chiar dacă nu sunteți într-o echipă, această metodă ar fi mai grea pentru dvs. pe măsură ce lucrați.
pentru a face lucrurile mai ușoare într-o situație ca aceasta, aveți la dispoziție obiecte Scriptabile. Și ce sunt obiectele Scriptabile? Pur și simplu, sunt containere de date. Dezvoltatorul Unity creează un șablon de bază pentru aceste containere, definind ce informații ar trebui să conțină fiecare obiect. Apoi, obiectele Scriptabile sunt create din acel șablon, care sunt apoi utilizate de unity game objects. În exemplul de mai sus, un singur obiect Scriptabil poate fi utilizat pentru a defini care sunt diferitele proprietăți ale unui element. Apoi, acel obiect Scriptabil este referit de toate copiile articolului. Înainte, dacă doriți să modificați Statisticile unui articol, va trebui să modificați valorile fiecărei copii a articolului. Acum, cu obiecte Scriptabile, trebuie doar să schimbați un obiect (obiectul Scriptabil) și toate obiectele care obțin date din acel obiect Scriptabil se schimbă în același timp.
este întotdeauna util să vezi aceste lucruri în acțiune, să creezi un nou proiect. Acest proiect arată off obiecte Scriptabile și modul în care acestea vă pot ajuta. Proiectul este format din trei obiecte de joc menite să reprezinte trei personaje. Fiecare personaj moștenește unele valori dintr-un obiect Scriptabil. Aceste valori sunt sănătatea maximă, atacul, apărarea, viteza și un nume și o culoare pentru personaj. O interfață de utilizator simplă afișează aceste valori, astfel încât să puteți vedea cu ușurință rezultatele aplicării obiectelor Scriptabile. Acum, că aveți un scop final, este timpul pentru a obține crearea.
Project Setup
presupunând că veți implementa aceste idei într-un proiect nou, deschideți aplicația Unity Hub și creați un proiect nou așa cum se arată în Figura 1.
Figura 1: Crearea unui nou proiect
în fereastra următoare, dați proiectului orice nume pe care îl alegeți și decideți calea fișierului. În timp ce puteți efectua acest proiect în orice șablon, acest exemplu utilizează șablonul de proiect 3D așa cum se arată în Figura 2. Este recomandat să utilizați acest șablon, dacă doriți să urmați de-a lungul.
Figura 2: setarea numelui, tipului și locației proiectului
odată ce proiectul este creat, veți dori să vă organizați. În fereastra active, va trebui să creați trei foldere făcând clic dreapta pe fereastră și navigând pentru a crea-> Folder așa cum se arată în Figura 3 denumiți folderele materiale, obiecte Scriptabile și scripturi.
Figura 3: Crearea unui nou folder
în timp ce sunteți aici, este o idee bună să continuați și să realizați trei materiale. Aceste materiale sunt folosite pentru a schimba culorile diferitelor obiecte urmând orice material specifică obiectul Scriptabil. Pentru a crea aceste materiale, navigați la folderul materiale și faceți clic dreapta din nou, de data aceasta selectând creare-> Material. Când denumiți materialul, este recomandat să îi dați un nume care se corelează cu culoarea sa. De exemplu, acest prim material poate fi numit roșu. Pentru a seta această culoare, trebuie să selectați materialul nou creat și să navigați la fereastra inspectorului. În câmpul Albedo, există un selector de culori prezentat în Figura 4 pe care puteți face clic pentru a deschide selectorul de culori.
Figura 4: deschiderea selectorului de culori
culoarea este modificată fie prin mutarea cercului mic în selectorul de culori, fie prin introducerea directă a valorilor RGB în jumătatea inferioară a ferestrei selectorului de culori. În exemplul de mai sus, valorile RGB ar fi 255, 0, 0. După aceasta, ar trebui să creați încă două materiale și să le atribuiți culorile. Acest exemplu folosește verde și albastru, dar pot fi orice culoare la alegere.
acum vine momentul pentru a crea scena reală acest lucru în cazul în care acest joc are loc. Se compune din două părți majore – există interfața cu utilizatorul care afișează statisticile date diferitelor obiecte scriptabile și cele trei capsule reprezentând caractere. „Personajele” sunt cea mai ușoară parte, astfel încât să puteți începe acolo. Tot ce trebuie să faceți este să mergeți la fereastra ierarhie, faceți clic pe butonul Creare și alegeți 3D Object -> capsulă prezentată în Figura 5. Faceți acest lucru de trei ori sau copiați primul obiect și le puteți da și nume, dacă doriți. Acest exemplu oferă capsulelor numele Char1, Char2, Char3.
Figura 5: Crearea unui obiect capsulă
va trebui să le schimbați pozițiile, astfel încât să nu se suprapună între ele. Pentru a schimba poziția obiectului, selectați una din ierarhie și navigați la componenta transformare din Inspector. Apoi schimbați câmpurile de poziționare x, y și z pentru a muta obiectele acolo unde le doriți.
Figura 6: Editarea poziției obiectului
Tabelul 1 prezintă pozițiile exacte ale tuturor celor trei capsule din acest exemplu.
Tabelul 1: Toate obiectele și pozițiile lor în lume
obiect |
poziția X |
poziția Y |
poziția Z |
Car1 |
|||
car2 |
|||
Car3 |
desigur, nu ezitați să ajustați oricare dintre aceste numere, dacă doriți. Următoarea este interfața cu utilizatorul, care afișează valorile date obiectelor Scriptabile. Pentru a începe, va trebui să faceți clic pe butonul Creare a ierarhiei, dar de data aceasta alegeți UI -> Canvas. Apoi, cu noul obiect Canvas selectat, faceți clic din nou pe butonul Creare și de această dată selectați Creare copil gol. În cele din urmă, încă o dată faceți clic pe butonul Creare și de această dată alegeți UI -> Text. Trageți obiectul Text nou creat pe obiectul jocului gol și duplicați textul de patru ori folosind Ctrl + D, astfel încât să existe un total de cinci obiecte Text sub GameObject. După ce ați terminat, ierarhia dvs. ar trebui să arate ca cea din Figura 7.
Figura 7: ierarhia actuală
fiecare obiect Text se corelează cu numele și statisticile care sunt date prin intermediul obiectului Scriptabil, aceste statistici fiind sănătate maximă, atac, apărare și viteză. Este util să modificați numele obiectelor Text la valoarea pe care o reprezintă. Deci, primul obiect Text poate fi numit nume_text, iar al doilea poate fi numit attack_text și așa mai departe. În plus, va trebui să modificați textul implicit pentru a oferi o imagine vizuală a aspectului interfeței cu utilizatorul. Acest lucru se face navigând la componenta Text din Inspector și modificând valoarea textului. Și în cele din urmă, ajustați pozițiile lor, astfel încât acestea nu sunt toate stivuite pe partea de sus a reciproc. Pentru a menține acest lucru ușor, Tabelul 2 arată toate diferitele nume de obiecte și care ar trebui să fie valorile lor respective.
Tabelul 2: toate obiectele Text și valorile implicite ale textului și poziționării
redenumiți GameObject (sub Canvas) la ceva puțin mai descriptiv, cum ar fi Char1Description, apoi duplicați obiectul părinte. Redenumiți cele două duplicate în Char2Description și Char3Description și poziționați cele trei obiecte, astfel încât acestea să fie deasupra obiectelor capsulei. Acest exemplu plasează Char1Description la o poziție X de -300, Char2Descrption la 0 și Char3Position la 250. Toate valorile de poziție Y și Z sunt lăsate la 0.
a fost un drum cam lung, dar configurarea proiectului este completă! Acum vine momentul pentru a codifica și a vedea cum sunt create obiecte Scriptabile în ceea ce privește programarea. În fereastra active, navigați la folderul Scripturi și creați două scripturi noi făcând clic dreapta și navigând pentru a crea-> C# Script. Aceste scripturi ar trebui să fie numite CharStats și LoadStats. Odată ce acestea sunt create, veți începe în scriptul CharStats, deci faceți dublu clic pe acest script pentru a deschide Visual Studio și a începe procesul de codificare.
Script CharStats
pentru a crea un obiect Scriptabil, va trebui să adăugați mai întâi la meniul Create
pe care l-ați folosit pentru a crea materiale și scripturi. Pentru a face acest lucru, veți utiliza atributul CreateAssetMenu
și specificați numele și locația implicită din meniu. De asemenea, va trebui să schimbați din ce clasă CharStats
moștenește. În mod implicit, fiecare clasă C# dintr-un proiect Unity moștenește de la MonoBehaviour
, dar acest script trebuie să moștenească de la ScriptableObject
în schimb.
observați când setați menuName
că este utilizat un caracter slash, indicând utilizarea submeniurilor. Dacă doriți, puteți elimina slash-ul și aveți doar opțiunea unități de jucător prezentă fără a fi nevoie să navigați mai departe prin meniul Creare. În acest caz, submeniul a fost adăugat în primul rând pentru a arăta că vă puteți organiza obiectele Scriptabile după orice doriți. În acest caz, meniul este creare -> creare caractere -> unități de jucător. Dacă doriți, într-un alt obiect Scriptabil puteți crea obiectul din aceeași cale, dar cu o opțiune de creare diferită, cum ar fi elementul.
fiind un obiect Scriptabil nu este nevoie de implicit Start
și metodele de actualizare, astfel încât să puteți șterge cele. Scopul principal al acestui obiect este de a stoca date care sunt date unui alt obiect, dar sunt create și două metode personalizate pentru a demonstra modul în care obiectele Scriptabile pot face mai mult decât să dețină date. Vorbind despre date, Codul pentru definirea datelor pe care le deține acest obiect merge astfel:
1
2
3
4
5
6
|
public string charName;
atac public int;
public int defense;
public int speed;
public int maxHealth;
Material public newColor;
|
așa cum am menționat anterior, fiecare obiect scriptabil conține un nume și câteva valori pentru patru statistici diferite. De asemenea, deține informații despre ce culoare nouă a personajului odată ce obiectul Scriptabil este aplicat. Valorile pentru fiecare sunt definite în editorul Unity și, desigur, vor fi diferite pentru fiecare obiect creat.
cele două metode sunt păstrate simple. Unul imprimă pur și simplu un mesaj către consola de depanare spunând că personajul a fost încărcat. Acest mesaj este tipărit în metoda Start
a scriptului LoadStats
.
1
2
3
4
|
public void PrintMessage()
{
depanare.Jurnal („caracterul” + charName + ” a fost încărcat.”);
}
|
RandomizeStats
, a doua metodă, face exact așa cum sugerează și numele. Modifică valorile obiectului Scriptabil la un număr aleatoriu între 1 și 20. Mai târziu, veți programa proiectul pentru a actualiza automat interfața cu utilizatorul cu noile valori. Dar asta nu este chiar cea mai interesantă parte! Datele dintr-un obiect Scriptabil sunt persistente, ceea ce înseamnă că vor rămâne aceleași pentru sesiune până la închiderea jocului. Acest lucru este util mai ales dacă creați un joc care constă din mai multe scene, deoarece obiectele vechi obișnuite sunt șterse, iar altele noi sunt reîncărcate pe măsură ce se deschide o nouă scenă. Cu toate acestea, datele obiectelor Scriptabile sunt neatinse în tranziția dintre scene. În plus, datele rămân aceleași în timp ce lucrați în editorul Unity până când editorul în sine este închis. Aceasta înseamnă că modificările aduse datelor din obiectele Scriptabile în timpul rulării jocului de la editor sunt prezente odată ce jucați din nou Jocul de la editor, cu condiția să nu se facă modificări la datele în sine.
acest lucru este tot acolo este la script CharStats. Ar putea părea destul de simplu, dar proiectul nu este complet. Ați programat abilitatea de a crea obiecte Scriptabile cu propriile metode și date, dar personajele dvs. capsulă nu știu nimic despre aceste obiecte. În ceea ce le privește, obiectele Scriptabile nu există. Pentru a remedia acest lucru, va trebui să deschideți scriptul LoadStats și să îl codificați, astfel încât obiectele să poată utiliza datele unui obiect Scriptabil pentru a actualiza interfața cu utilizatorul și a-și schimba culoarea. Codul ar trebui să arate similar cu figura 8.
figura 8: script Charstats Complete
Script LoadStats
nu vă faceți griji cu privire la schimbarea în cazul în care clasa acest script moștenește. Implicit MonoBehaviour
este exact ceea ce este necesar. În schimb, includeți o nouă declarație de utilizare în partea de sus.
1
|
utilizarea UnityEngine.UI;
|
inclusiv acest lucru vă permite să obțineți textul din interfața cu utilizatorul și să le actualizați pentru a afișa valorile găsite în obiectele Scriptabile. Acum, pe clasa în sine, începând cu variabile.
1
2
3
4
5
6
7
8
|
// scriptable object
public CharStats charStat;
public Text nameText;
public Text attackText;
public Text defenseText;
public Text speedText;
public Text maxHealthText;
public MeshRenderer currentColor;
|
după cum sa menționat în comentariu, variabila charStat
este obiectul Scriptabil care este utilizat. Puteți vedea aici că obținerea acestor obiecte Scriptabile nu este diferită de declararea oricărei alte variabile. Mai târziu în script, veți obține variabilele și metodele din obiect și le veți folosi în acest script. De fapt, metoda PrintMessage
Găsită în CharStats
este utilizată în LoadStats
Start
metoda chiar acum.
1
2
3
4
5
|
void Start()
{
DisplayStats ();
charStat.PrintMessage();
}
|
ca și în cazul oricărui alt script extern, tot ce trebuie să faceți este să apelați charStat
urmat de PrintMessage
pentru a obține metoda Găsită în acel obiect Scriptabil. Acest lucru se poate dovedi util mai ales dacă aveți obiecte care au toate comportamente similare sau identice. În acest caz, poate fi util și dezvoltatorului, ca în acest exemplu, să imprime mesaje pe consola de depanare. Dacă ceva ar merge prost și bănuiți că obiectul Scriptabil a fost de vină, puteți utiliza mesajele consolei de depanare pentru a găsi problema.
chiar acum, există o eroare spunând DisplayStats
nu există. Pentru a remedia acest lucru, navigați sub metoda Update
și adăugați acest cod.
aici este locul unde valorile stocate în obiectul Scriptable ieși pentru a juca. Toate acele variabile de text declarate mai devreme? Vor primi date pentru afișare, astfel încât acele semne de întrebare pe care le setați în editor afișează acum o anumită valoare. De asemenea, deși nu este într-adevăr un stat, în sine, culoarea personajului este schimbată aici apelând currentColor.material
și setându-l la Materialul setat în obiectul Scriptabil.
a doua metodă charStats
, RandomizeStats
, nu a fost încă folosită, deci ar trebui să găsiți un loc pentru aceasta. În metoda Update
, programul verifică dacă bara de spațiu a fost apăsată. Dacă are, atunci apelează RandomizeStats
și dă obiectului Scriptabil câteva valori noi. Apoi DisplayStat
este apelat din nou și sunt afișate noile valori.
1
2
3
4
5
6
7
8
|
actualizare void()
{
dacă (intrare.GetKeyDown (Cod Cheie.Spațiu))
{
charStat.RandomizeStats ();
DisplayStats();
}
}
|
aceasta încheie scriptul LoadStats
, încheind astfel porțiunea de codare a acestui proiect. Codul ar trebui să arate similar cu figura 9. Tot ce mai rămâne de făcut acum este să creați câteva obiecte Scriptabile, să le aplicați obiectului capsulei folosind LoadStats
și să încercați această nouă funcționalitate. Desigur, asigurați-vă că vă salvați munca înainte de a reveni la editorul Unity.
Figura 9: completați scriptul LoadStats
finalizarea proiectului
pentru a utiliza obiecte Scriptabile, trebuie mai întâi să le creați. În fereastra active, sub folderul obiecte Scriptabile, faceți clic dreapta și navigați la Create – > Character Creation -> Player Units așa cum se arată în Figura 10.
Figura 10: Crearea unei noi unități de jucător, un obiect Scriptabil
puteți numi obiectul orice doriți. Exemplul bazează aceste obiecte pe clasele tradiționale de jocuri de rol, așa că va avea un războinic, vânător și Mag. Selectați noul obiect, apoi navigați la fereastra Inspector și dați valori diferitelor câmpuri. Pentru a completa noul câmp de culoare, trebuie doar să navigați la folderul materiale și să faceți clic și să trageți materialul dorit în câmp, așa cum se arată în Figura 11.
Figura 11: Setarea noului material Color al obiectului
creați încă două obiecte Scriptabile și faceți același lucru ca înainte, oferindu-le valori diferite pentru diferitele câmpuri. După ce ați terminat, treceți la fereastra ierarhiei și selectați unul dintre obiectele char. Apoi dați-le scriptul LoadStats ca o componentă navigând la folderul Scripts din fereastra Assets, găsind LoadStats și trăgându-l în fereastra Inspector așa cum se arată în Figura 12.
Figura 12: atașarea scriptului LoadStats la un obiect
apoi, va trebui să completați câmpurile LoadStats. Pentru a începe, găsiți un obiect Scriptabil pe care doriți să îl utilizați pe primul dvs. „Caracter” și aplicați-l în câmpul Char Stat așa cum se arată în Figura 13. Amintiți-vă că obiectele Scriptabile se găsesc în fereastra active sub obiecte Scriptabile.
Figura 13: setarea în cazul în care CHAR1 obiect Scriptable este de a obține date
acum completați câmpurile de text. În ierarhie, veți extinde Canvas urmată de extinderea obiectului descriere caracter care se corelează cu cel pe care îl editați în prezent. De exemplu, editarea Char1 înseamnă că veți dori să extindeți Char1Description. Apoi luați obiectele text găsite sub obiectul părinte și aplicați-le câmpurilor corespunzătoare așa cum se arată în figura 14.
figura 14: setarea tuturor câmpurilor de text
odată ce câmpurile de text au fost completate, trebuie doar să obțineți Randatorul de plasă al obiectului, astfel încât să aveți acces la material, permițând astfel schimbarea culorii. Tot ce trebuie să faceți este să faceți clic și să trageți componenta De redare a ochiurilor în fereastra Inspector și să o trageți în câmpul de culoare curent, așa cum se arată în Figura 15.
Figura 15: Setarea câmpului de culoare curent
repetați pașii anteriori pentru celelalte două obiecte de caractere și veți fi terminat proiectul. Când este gata, faceți clic pe butonul De redare din partea de sus a editorului și observați că trei obiecte aproape identice au valori foarte diferite atașate acestora. Dacă dintr-un anumit motiv ceva nu arată bine, primul loc de verificat ar fi obiectele dvs. Scriptabile și asigurați-vă că valorile și culorile afișate sunt cele pe care le-ați dorit. Nu uitați să verificați și noul câmp de culoare.
toate aceste numere și culorile lor provin de la obiecte Scriptabile, care ele însele provin dintr-un singur șablon. Ai putea face chiar mai multe obiecte Scriptabile, precum și conectați-le în câmpul Char Stat în componenta de încărcare statistici unui obiect și au un caracter foarte diferit. În timpul rulării jocului (figura 16), ar trebui să vedeți un mesaj în consola de depanare din colțul din stânga jos care să ateste că un personaj a fost încărcat. Există alte două mesaje, dar puteți vedea un singur mesaj fără a deschide consola de depanare completă, găsită la fereastră- > General – > consolă. De asemenea, puteți apăsa bara de spațiu pentru a obține câteva statistici complet noi pentru personajele dvs. Dacă opriți jocul, apoi reluați-l, veți observa că valorile pe care le-ați generat aleatoriu persistă, demonstrând persistența obiectelor Scriptabile. Vor reveni la valorile lor originale, fie prin introducerea manuală a valorilor în obiecte, fie prin închiderea și redeschiderea editorului.
figura 16: obiecte Scriptabile în acțiune
concluzie
firește, puteți crea mai multe tipuri de obiecte Scriptabile pentru mai multe tipuri de obiecte. Acest exemplu a demonstrat utilizarea lor prin clase de caractere, dar există și exemplul elementelor menționate mai sus. Poate fi folosit chiar și pentru obiecte mult mai mici, cum ar fi power-up-uri care amintesc de cele găsite în jocurile arcade. În utilizarea obiectelor Scriptabile, creați un sistem curat, ușor, unde puteți schimba și încărca date cu câteva apăsări de taste și puteți vedea rezultatele aproape instantaneu. Utilizarea obiectelor Scriptabile înseamnă, de asemenea, mai puține scripturi de creat, deoarece puteți utiliza un șablon pentru mai multe obiecte. Indiferent dacă proiectul dvs. este mare sau mic sau dacă echipa dvs. are mulți membri sau doar dvs., obiectele Scriptabile pot facilita dezvoltarea tuturor.