Countdowns sunt elemente simple care apar într-o mulțime de jocuri, dar designul lor poate fi ușor trecute cu vederea.
Cu câteva adăugiri simple, însă, un cronometru regulat poate fi făcut mult mai atrăgător și mai potrivit pentru universul jocului prezentat și, astfel, îmbunătățește considerabil experiența jucătorului.
Multe dintre aceste elemente sunt inspirate de discuția "Juice it or lose it" de Martin Jonasson și Petri Purho cu privire la modul de a face jocul tău "juicier". Concluzia este că nu este suficient să prezentăm doar informația în cea mai mare bază; trebuie să îmbunătățiți și să accentuați ceea ce se întâmplă cu culoarea, sunetele și mișcările, ceea ce va face întreaga experiență mult mai interesantă. Vă recomand să vizionați în totalitate discuțiile despre alte aplicații.
În această serie din două părți, vom trece prin aceste elemente și apoi le vom implementa într-un proiect Unity simplu, pentru care veți avea nevoie de cea mai nouă versiune. În partea următoare 2, vom analiza elemente mai detaliate și nuanțate.
Gata? Sa mergem!
Timerii din jocuri pot servi în scopuri diferite, care nu se suprapun în mod necesar aplicațiilor. Acestea sunt:
Proiectarea unui cronometru se poate schimba între cele două, deoarece informațiile necesare jucătorului se schimbă în aplicația sa.
Când ți se dau cinci minute pentru a dezamorsa o bombă Metal Gear Solid 2, trebuie să știți exact cantitatea de timp pe care o aveți, deoarece fiecare secundă devine vitală pentru progresul și planificarea globală. Cronometrul trebuie să transmită jucătorului cât de mult a rămas și să-i avertizeze dacă suma respectivă devine critică.
Când trebuie să țineți pentru o anumită perioadă de timp, acel element de exactitate devine mai puțin important. Desigur, ar fi frumos să știți exact timpul în secunde de care aveți nevoie pentru a supraviețui, jocul poate funcționa și fără acele informații. Ar putea fi chiar îmbunătățit, ca o informație cum ar fi "trebuie să vă mențineți pentru câteva secunde mai mult!" este mai ușor de înțeles într-o situație stresantă decât "citiți acest număr în colțul ecranului" și puteți spori imersia în lumea jocurilor.
Acum, să aruncăm o privire asupra elementelor care vor face numărătoare inversă și cronometre mai interesante și mai interesante.
În loc de a pune doar un număr undeva, puteți crea propriul grafic numărătoare inversă care va spune utilizatorului aproximativ cât timp a rămas.
O implementare grafică, 2D, va necesita o anumită finisare, deoarece trebuie să vă asigurați că jucătorul poate intua și citi corect ideea că "timpul se scurge și că aveți aproximativ X secunde rămase".
Acest lucru funcționează foarte bine dacă utilizați indicatori de mediu pentru a arăta progresul și aveți voci în joc, care vă spun cât de mult a rămas. Un număr lipit în partea de sus a ecranului se poate simți non-diegetic și ar putea foarte bine să scoată niște jucători din joc.
În Jumătate din viață 2, de exemplu, trebuie să apărați o poziție până când un teleporter a fost acuzat. La început, este afișată o încărcare completă, care trebuie reîncărcată din nou.
Încărcarea este indicată de elementele aparatului care se aprind și încep să se rotească, oferindu-vă un ceas rudimentar care transmite cât mai mult timp trebuie să țineți.
După ce a fost folosit, teleportarea trebuie să se reîncarce. Elementele luminează lent din nou, oferindu-le jucătorului o indicație cât mai mult timp trebuie să reziste (de la Jumătate din viață 2)Taxa de teleportare este, de asemenea, un bun exemplu de încorporat afișare, care este direct în lumea jocurilor. Acestea sunt utile deoarece păstrează playerul focalizat pe lumea în sine, în timp ce un timer pe un strat GUI ar fi în partea superioară a gameworld-ului.
Un cronometru de oxigen în Metroul: ultima lumină, direct în interiorul lumii joculuiObțineți un font cool pentru numărătoare inversă! Anumite fonturi asemănătoare acestui font de afișare digitală simulează ecranele mai vechi de lumină, care au fost utilizate în cea mai mare parte pentru numerele în afișaje vechi "digitale".
Jucătorul va asocia deja aceste fonturi cu cronometre și numărătoare inversă și va face mult mai simplu să citească, ca și cum ar fi în ceva asemănător cu Arial sau Times New Roman.
De asemenea, se poate aplica lizibilitatea de bază și compoziția textului. Nu așezați numerele pe verticală, nu utilizați cifre romane, etc.
Seria Metal Gear Solid face acest truc minunat unde se spune că "ai doar 500 de secunde rămase!" și apoi afișați un număr care citește "5:00".
Când am jucat-o pentru prima dată, mintea mea a completat automat acest lucru ca fiind "5 minute", dar a fost păcălit. "500 de secunde" este un format neobișnuit și totuși corect pentru timp, iar oamenii, în general, nu sunt instruiți să facă corect acest lucru.
Efectul este că jucătorii vor crede că au doar 5 minute, în timp ce în realitate sunt 8 minute și 20 de secunde.
Acest lucru nu are, de obicei, dezavantaje, deoarece acestea vor fi impulsionate de limita de timp și se vor concentra asupra realizării sarcinii Metal Gear Solid 2: dezmembrarea bombelor), ceea ce îi va distrage atenția de faptul că au trecut cinci minute și că mai există timp.
Acest lucru merge mână în mână cu faptul că îi spuneți jucătorului cantitatea de timp rămasă în câteva secunde.
Un element recurent în MGS2 numărătoarea inversă este că acestea nu au cifre de afaceri de 60 de secunde, dar cifre de afaceri de 100 de secunde. Acesta nu este de fapt un minut de trecere la următoarea, dar secvențele sunt listate. Deci, în loc de 01:00 să devii 00:59, 0100 devine 0099. Trebuie să obțineți valoarea însăși, ceea ce face ca numărătoarea inversă să fie mai ușor de creat, deoarece puteți sări peste calculul minutelor.
Având afișate milisecunde după ce numărul principal le face mult mai interesant!
Acest lucru este destul de ușor, deoarece timpul poate fi stocat deja într-un flotor. Două până la trei numere în virgulă mobilă sunt o sumă bună care este încă lizibilă și potențial utilă jucătorului.
Când cronometrul ajunge la o anumită sumă mică, colorați textul în mod diferit. A face galben funcționează bine, deoarece face ca timerul să iasă mai mult.
Odată ce ajunge în ultimele secunde, face roșu, mai mare și bliț. Acum, suma mică nu poate fi ignorată și creează tensiune în player.
Acum, să începem să îmbunătățim un cronometru prin cod. Vom face acest lucru:
În acest caz:
Ecranul îmbunătățit al timeruluiVom folosi câteva active speciale pe care le puteți obține sau creați rapid, sau puteți obține fișierele sursă pe care le puteți descărca în partea dreaptă sus a acestui articol.
Gata? Sa mergem!
Începeți unitatea și creați un nou proiect.
Apoi creați un obiect de joc gol, puneți-l în fața camerei și adăugați un textMesh prin intermediul Componentă> Mesh> TextMesh la el. Acesta va fi ecranul pentru cronometrul din lumea jocurilor.
Vom folosi 3d-textmesh pentru moment, dar acest lucru va funcționa și în alte domenii, cum ar fi interfața de bază Unity. Deocamdată, textul 3D are și avantajul că acesta poate fi interior lumea jocurilor, așa cum am menționat mai înainte, și nu deasupra a lumii în interiorul unui strat GUI.
Noul text 3D nu va fi afișat imediat; trebuie să modificăm câteva valori.
Setați dimensiunea caracterelor la 0.1, ancora la mijlocul stânga, alinierea la centru, și dimensiunea fontului la 80. Adăugați, de asemenea, un text de substituent în câmpul "text". Acest lucru este doar așa că avem ceva să ne uităm la editor; în timpul jocului real, acesta va fi adaptat direct prin cod. 00:00 va face bine.
Apoi creați un nou fișier numit Countdown.cs, adăugați-o la obiectul nostru de timp și adăugați acest cod la acesta:
utilizând UnityEngine; utilizând System.Collections; clasa publica Countdown: MonoBehavior float timer = 120f; void Actualizare () timer - = Time.deltaTime; GetComponent(); .text = timer.ToString ();
Avem o variabilă numită cronometru, care va menține timpul care se numără în jos. Chiar acum este la 120 secunde sau 2 minute. Apoi în Actualizați
funcție, care se numește fiecare cadru, deducem Time.deltaTime
. Aceasta este o scurtătură pentru a obține timpul efectiv scurs acolo. După aceea, obținem textMesh
componentă a obiectului și să-i adapteze text
valoare pentru a fi timer, transformat într-un șir.
Când rulați acum jocul, textul va arăta că numărul scade. Felicitări! Ai construit un timer rudimentar.
Dar este departe de a se angaja încă. De asemenea, arată 4 până la 5 numere după punctul zecimal și va continua să ajungă în valori negative după ce ajunge la zero.
Un cronometru negativ va arăta rupt, așa că hai să ne asigurăm că nu se va întâmpla. Adaptați Actualizați
funcția de a arăta astfel:
dacă (timer> 0f) timer - = Time.deltaTime; altfel timer = 0f; GetComponent(); .text = timer.ToString ();
Acest lucru va micșora doar cronometrul dacă este efectiv pozitiv. În cazul în care va deveni negativ oricum (ceea ce se poate întâmpla atunci când scade timpul scurs), acesta va fi setat la zero.
Amintiți-vă că mărimea digitală de afișare digitală menționată mai sus Mergeți și adăugați-l la proiectul dvs.!
Secțiunea textmesh din inspector are un câmp pentru font, așa că trageți fontul din activele dvs. acolo.
Și acum cronometrul nostru va arăta mult mai curat!
În acest moment, numărul de numere după punct zecimal variază, ceea ce face ca cronometrul să fluctueze sălbatic. Fixați-l prin adaptarea liniei care aplică valoarea textului astfel:
GetComponent() .text = timer.ToString ("F2");
Acest lucru va decupa automat totul după două numere, în mod constant afișându-vă zeci și sute de secunde.
Să adăugăm niște coloranți adaptivi! Adaptați Actualizați
funcția de a arăta astfel:
dacă (timer> 0f) timer - = Time.deltaTime; altfel timer = 0f; dacă (timer < 10f) GetComponent() .color = Color.red; altfel dacă (timer < 20f) GetComponent () .color = Color.yellow; GetComponent () .text = timer.ToString ("F2");
Timerul va deveni galben dacă mai rămân mai puțin de 20 de secunde, iar roșu, dacă mai rămân mai puțin de 10 secunde.
Întregul fișier Countdown.cs ar trebui să arate astfel:
utilizând UnityEngine; utilizând System.Collections; clasa publică numărătoare inversă: MonoBehavior float timer = 60f; public AudioClip soundBlip; void Actualizare () if (timer> 0f) timer - = Time.deltaTime; altfel timer = 0f; dacă (timer < 10f) GetComponent() .color = Color.red; altfel dacă (timer < 20f) GetComponent () .color = Color.yellow; GetComponent () .text = timer.ToString ("F2");
Si asta e! Acum avem o numărătoare inversă mult mai interesantă și mai interesantă.
De asemenea, vă puteți uita la proiectul complet din fișierele sursă din partea dreaptă sus a acestui articol.
Am aruncat o privire asupra mai multor elemente care vor îmbunătăți cronometrele jocurilor, ale căror lecții pot fi aplicate și pentru multe alte elemente. În plus, timerul pe care l-am construit poate fi ușor adaptat și introdus în orice fel de joc și va fi un element interesant fără a trebui să vă dezvoltați din nou conținutul.
Dar sunt mai multe! În următoarea parte a acestei serii vom analiza și mai multe elemente și vom continua să ne îmbunătățim timpul.