Sfat rapid Pauză, mișcare lentă și dublă în unitate

Întreruperea unui joc Unity este ușoară. Există câteva lucruri pe care ar trebui să le cunoașteți, dar vom ajunge la cei de la sfârșitul acestui sfat. Vom adăuga câteva butoane GUI simple pentru a controla timpul într-un proiect Unity de bază.


Rezultatul final al rezultatelor

Să aruncăm o privire asupra rezultatului final pe care îl vom strădui:


Pasul 1: Creați un proiect nou

Să începem prin deschiderea Unității și crearea unui nou proiect. S-ar putea să doriți să adăugați o anumită animație sau un fel de acțiune la proces, astfel încât să puteți vedea efectiv un efect atunci când apăsăm butoanele. În exemplul furnizat, am făcut doar niște cuburi simple de filare.

Deschiderea unui nou proiect este plăcută și simplă. Odată ce Unity a terminat de încărcat, dacă ai setat-o ​​să afișeze Project Wizard, poți să dai clic pe fila 'Create New Project' și să introduci un nume de fișier. Unitatea va avea grijă de restul. Dacă fereastra Expert proiect nu apare atunci când lansați unitatea, accesați Fișier> Proiect nou.


Pasul 2: Creați un script JavaScript nou

Unitatea are propriul sistem GUI construit, care merge mult peste acest sfat. Să spunem că tot ceea ce înțelege GUI se întâmplă într-o funcție numită OnGUI iar clasa GUI oferă o grămadă de lucruri reci, cum ar fi un buton.

Continuați și creați un nou script din meniul Active - selectați Active> Creați> JavaScript:

Noul script ar trebui să apară în fereastra Project. Faceți clic o dată pe script și ar trebui să fie evidențiat astfel încât să îl puteți redenumi. Denumiți scriptul "PauseScript" și apăsați enter. Acum, noi vrem să începem codarea, așa că du-te mai departe și faceți dublu-clic de data aceasta. Aceasta ar trebui să deschidă editorul de script implicit cu șablonul / codul implicit al Unity deja în el. Odată ce editorul de script-uri este încărcat, ștergeți codul implicit și înlocuiți-l cu codul de mai jos:

 funcția OnGUI () // arată un buton "pauză" dacă (GUI.Button (Rect (0,0,120,30), "TOGGLE PAUSE")) // apelați funcția de comutare doPauseToggle (); 

GUI.Button necesită un Rect (care conține x, y, lățimea și înălțimea butonului nostru) și șirul de afișare din cadrul acestuia. Aflând dacă butonul a fost sau nu apăsat este la fel de simplu ca și punerea GUI.Button trageți într-o instrucțiune if.


Pasul 3: Codarea funcției Pauză de comutare

Aici, ne referim la o funcție pe care o vom numi doPauseToggle (). Aceasta va fi o funcție simplă care verifică dacă suntem întrerupți sau ne-întrerupți, apoi efectuează acțiunea corectă. Adăugați următorul cod în partea de jos a scriptului PauseScript.js, sub funcția OnGUI pe care am adăugat-o în pasul 2:

 funcția doPauseToggle () // aici verificăm dacă ne aflăm la o scară de timp mai mare de 0 dacă (Time.timeScale> 0) // scara de timp este peste zero, deci trebuie să oprim jocul aici pauseGame () ;  altfel // scara de timp a fost mai mică decât zero, deci ne-am opri jocul aici unPauseGame (); 

Time.timeScale este modul în care ne confruntăm cu întreruperea jocului. În esență, schimbăm scara la care trece timpul. Atunci când intervalul de timp este 1.0, timpul este în timp real. La zero (0), timpul este întrerupt. Deci, în nostru doPauseToggle funcție pur și simplu pentru a vedea dacă timpul este mai mare decât zero, un-pauză, dacă așa vom numi un nou pauseGame () funcţie. În caz contrar, este apelat unPauseGame ().


Pasul 4: Funcțiile de pauză de codificare și de întrerupere

Funcțiile din Pasul 3, pauseGame () și unPauseGame (), pur și simplu manipula Time.timeScale valoarea 0 sau 1. Adăugați următorul cod în partea de jos a scriptului PauseScript.js, sub codul pe care l-am adăugat la pasul 3:

 funcția pauzăGame () // set scara în care timpul trece la 0, timpul de congelare (!) Time.timeScale = 0;  function unPauseGame () // set scara in care timpul trece la 1, ruleaza in realtime din nou Time.timeScale = 1; 

Credeți-vă sau nu, este tot ce trebuie să faceți pentru a adăuga un buton de pauză la un fișier Unity. Dacă aveți o acțiune în scena dvs. Unity, veți vedea acum că se întrerupe și se oprește de fiecare dată când faceți clic pe buton! Rețineți că, dacă nu aveți nimic în scenă, nu veți vedea nimic când veți juca.


Pasul 5: Deplasare în mișcare lentă

Te gândești la ce mă gândesc? Dacă 0 se întrerupe și 1 o face să plece, ce se întâmplă cu 0,5? Gândiți-vă la bullet-time!

Mai întâi, hai să mergem mai departe și să adăugăm un nou buton la adresa noastră OnGUI () funcţie. Puneți acest lucru în partea de jos a funcției, chiar deasupra închiderii bretele.

 // afișați un buton "slowmo" dacă (GUI.Button (Rect (0,30,80,30), "SLOWMO")) // sunați funcția de comutare slowMo (); 

Acum avem nevoie de o funcție nouă pentru a regla factorul de timp la mai puțin de 1. Derulați în jos până la sfârșitul scriptului PauseScript.js și adăugați această nouă funcție:

 funcția slowMo () // set scara în care timp 5asses la 0.1, care rulează în slowmo Time.timeScale = 0.1; 

? dovedind astfel că nu trebuie să fii Neo pentru bullet-time în Unitate!


Pasul 6: Dublu!

În sfârșit, pentru distracție, să facem totul să fie puțin nebun să jucăm în timp dublu. Deși nu am văzut acest lucru într-un joc mecanic actual, am văzut timp scalat temporar pentru a obține un efect de particule în picioare și a funcționat - a fost un efect de foc și autorul a vrut ca ecranul să fie umplut cu foc rapid pentru a aduce fundalul din ecranul său de meniu la viață. El a scalat timpul în sus pentru o secundă după ce meniul încărcat și focul a umplut ecranul. Apoi a redus timpul până la 1, astfel încât flăcările s-au mutat corect și totul în joc a fost la viteză regulată.

Pentru a adăuga timp dublu, vom urma aceeași procedură ca la pasul 5, adăugând un nou buton care va apela o nouă funcție. Noua functie va pune pur si simplu scala de timp la 2. Gasiti OnGUI () în scriptul PauseScript.js și adăugați următoarele, deasupra capătului funcției și deasupra închiderii creion curat.

 // afișați un buton "dublu timp" dacă (GUI.Button (Rect (0,60,120,30), "DOUBLE TIME")) // sunați funcția de comutare doubleTime (); 

Dreapta. Avem un buton, să adăugăm în această funcție doubleTime ():

 funcția doubleTime () // setare scară în care timpul trece la 0.5, rulează în slowmo Time.timeScale = 2; 

Pentru distracție, încercați să ajustați intervalul de timp de până la 100 și să vedeți ce se întâmplă.


Să facem o evidență a scenariului nostru. Iată PauseScript.js în întregime, doar în cazul în care ceva rău sa întâmplat pe parcurs:

 funcția OnGUI () // arată un buton "pauză" dacă (GUI.Button (Rect (0,0,120,30), "TOGGLE PAUSE")) // apelați funcția de comutare doPauseToggle ();  // afișează un buton "slowmo" dacă (GUI.Button (Rect (0,30,80,30), "SLOWMO")) // sunați funcția de comutare slowMo ();  // afișează un buton "dublu timp" dacă (GUI.Button (Rect (0,60,120,30), "DOUBLE TIME")) // apelați funcția de comutare doubleTime ();  funcția doPauseToggle () // aici verificăm dacă ne aflăm la o scară de timp mai mare de 0 dacă (Time.timeScale> 0) // scara de timp este peste zero, deci trebuie să oprim jocul aici pauseGame ();  altfel // scara de timp a fost mai mică decât zero, deci ne-am opri jocul aici unPauseGame ();  funcția pauzăGame () // set scara în care timpul trece la 0, timpul de congelare (!) Time.timeScale = 0;  function unPauseGame () // set scara in care timpul trece la 1, ruleaza in realtime din nou Time.timeScale = 1;  function slowMo () // set scara in care timpul trece la 0.1, ruleaza in slowmo Time.timeScale = 0.1;  functie doubleTime () // set scara in care timpul trece la 0.5, ruleaza in slowmo Time.timeScale = 2; 

Cuvintele finale și un cuplu de Gotchas!

Este important să rețineți acest lucru Time.timeScale nu va afecta codul într - un Actualizați() funcţie. Actualizarea are loc la fiecare "bifare" și se întâmplă în afara intervalului de timp, deci dacă aveți nevoie de lucruri care să se întâmple pe măsură ce jocul este întrerupt, cum ar fi o animație de fundal, este cel mai probabil să îl actualizați. Consultați documentația Unity pentru mai multe informații despre acest lucru.

Rețineți că dacă schimbați Time.timeScale valoare, toate acțiunile legate de timp, cum ar fi apelurile către funcția Invoke sau orice temporizatoare care utilizează valori din Time.time, vor fi, de asemenea, afectate de modificare. În cazul în care jocul dvs. rulează la viteza de două ori, va trebui să reduceți la jumătate viteza acțiunilor bazate pe timp (de exemplu, dacă aveți un joc de curse cu un cronometru și Time.timeScale dvs. este setat la 2.0, va trebui să încetiniți cronometrul cu o jumătate pentru ca acesta să măsoare cu precizie timpul).

Reacțiile fizice nu sunt direct afectate, deci jocul ar trebui să funcționeze așa cum ar fi în mod obișnuit să coliziunile și fizic-înțelept - numai pe o scară de timp diferită.

Asta e! Vă mulțumim că ați citit sfatul meu rapid. Joacă-te cu Time.timeScale și aștept cu nerăbdare să văd efecte reusite în Matrix în proiectele dvs. Distreaza-te, faci jocuri!

Cod