Quick Tips: Pause, Slow Motion & Double

Quick Tips: Pause, Slow Motion &Double-Time in Unity
12
Del
3
Del

Dette Cyber ​​mandag Envato Tuts + kurs vil bli redusert til bare $ 3. Ikke gå glipp av.

Pause et Unity spillet er enkel. Det er et par ting du bør være klar over, men vi vil komme til dem på slutten av dette tipset. Vi kommer til å legge noen enkle GUI knapper for å kontrollere tid innenfor en grunnleggende enhet prosjekt.




Endelig resultat Forhåndsvisning

La oss ta en titt på endelige resultatet vi skal jobbe mot:




Trinn 1: Opprett et nytt prosjekt

La oss starte med å åpne Unity og skape et nytt prosjekt. Det kan være lurt å legge litt animasjon eller noen form for handling i saken, slik at du faktisk kan se en effekt når vi trykker på knappene. I eksempelet gitt, jeg bare gjort noen enkle spinne kuber.

Åpne et nytt prosjekt er fin og enkel. Når Unity er ferdig lastet, hvis du har det satt til å vise Project Wizard kan du klikke på "Opprett nytt prosjekt-fanen og skriv inn et filnavn. Unity vil ta seg av resten. Hvis vinduet Project Wizard ikke kommer opp når du starter Unity, gå til Fil > Nytt prosjekt



Trinn 2:. Opprett en ny Javascript Script

Unity har sitt eget GUI system bygget, som går langt utover dette tipset. La oss bare si at alt GUI klok skjer i en funksjon som heter OnGUI og GUI klassen gir en hel haug av kule ting, som en knapp

Gå videre og skape et nytt manus gjennom eiendelene menyen -. Velge Eiendeler > Lag > Javascript Bilde:

Det nye manuset skal vises i prosjektvinduet. Klikk én gang på manuset, og det bør markere slik at du kan endre det. Navn manuset "PauseScript" og trykk enter. Nå ønsker vi å starte koding, så gå videre og dobbeltklikk det denne gangen. Det burde åpne opp standard script editor med Unity mal /standardkoden allerede i den. Når script editor er lastet opp, slette standardkoden og erstatte den med koden under:
funksjon OnGUI () {//viser en "pause" knappen hvis (GUI.Button (Rect (0,0,120,30) "TOGGLE PAUSE")) {//ring vår vippefunksjon doPauseToggle (); }}

GUI.Button krever en Rect (som inneholder x, y, bredde og høyde av vår knapp) og strengen for å vise i det. Finne ut om knappen er blitt trykket er så enkelt som å sette vår GUI.Button uavgjort metode til en hvis setningen



Trinn 3:. Coding pause Toggle Function

Her henviser vi til en funksjon som vi skal kalle doPauseToggle (). Dette vil være en enkel funksjon som sjekker for å se om vi blir stoppet eller un-pauset, utfører deretter riktig handling. Legg til følgende kode i bunnen av PauseScript.js script, under OnGUI funksjon vi har lagt i trinn 2:
funksjon doPauseToggle () {//her vi sjekke for å se om vi kjører på en tidsskala over 0 hvis (Time.timeScale > 0) {//tidsskala er over null, så vi trenger å pause spillet her pauseGame (); } Else {//tidsskala var mindre enn null, så vi fortsette en spillet her unPauseGame (); }}

Time.timeScale er hvordan vi håndterer pause spillet. Hovedsak, endrer vi skalaen som tiden går. Når tidsskala er 1,0, er tiden sanntid. På null (0), er tiden satt på pause. Så i vårt doPauseToggle funksjon vi bare sjekke for å se om tiden er større enn null, un-pauset, hvis så vi kaller en ny pauseGame () -funksjonen. Ellers unPauseGame () kalles



Trinn 4:. Coding Pause og Un-pausefunksjoner

Funksjonene i trinn 3, pauseGame () og unPauseGame (), ganske enkelt manipulere Time.timeScale verdi til enten 0 eller 1. Legg til følgende kode i bunnen av PauseScript.js script, under koden vi lagt i Trinn 3:
funksjon pauseGame () {//sett skalaen som tiden går til 0, frysetiden Time.timeScale = 0 (!); } funksjon unPauseGame () {//sett skalaen som tiden går til 1, kjører på realtime igjen Time.timeScale = 1;}

Tro det eller ei, det er alt vi trenger å gjøre for å legge til en pause knapp til en Unity fil. Hvis du har litt action i Unity scene, vil du nå se at det pauser og un-pauser når vi klikker på knappen! Merk at hvis du ikke har noe å gå på i scenen din, vil du ikke se noe skje når du trykker på play



Trinn 5:. Moving in Slow Motion

Er du tenker hva jeg tenker? Hvis 0 pauser og en gjør det gå, hva med 0,5? Tenk bullet-time!

Først, la oss gå videre og legge til en ny knapp i vår OnGUI () -funksjonen. Slippe dette i bunnen av funksjonen, like ovenfor den avslutt} spenne.
//Viser en "slowmo" -knappen if (GUI.Button (Rect (0,30,80,30), "slowmo")) { //ring vår vippefunksjon slowmo (); }

Nå trenger vi en ny funksjon for å justere tidsfaktoren til mindre enn 1. Bla ned til bunnen av din PauseScript.js manus og legge til denne nye funksjonen:
fungere slowmo () {//sett skala på hvilke tids 5asses til 0,1, kjører i slowmo Time.timeScale = 0,1;}

... og dermed beviser at du ikke trenger å være Neo for bullet-time i Unity



Step! 6: Dobbelt tid

Til slutt, for moro skyld, la oss gjøre alt gå litt gal ved å spille i dobbel tid. Selv om jeg ikke har sett dette brukt i en faktisk spillmekanikk, har jeg sett gang skalert midlertidig for å få en partikkel effekt oppe og går - det var en brann effekt og forfatteren ønsket skjermen fylles med brannen raskt å bringe bakgrunnen av hans menyskjermen til livet. Han skalert tid opp høyt for et sekund etter at menyen lastet og ilden fylte skjermen. Han deretter redusert tid tilbake til en slik at flammene beveget riktig og alt annet i spillet var på vanlig hastighet.

Hvis du vil legge dobbel tid, vil vi følge samme prosedyre som i trinn 5, og legger til en ny knappen som vil kalle en ny funksjon. Den nye funksjonen vil bare sette vår tidsskala til 2. Finn OnGUI () funksjonen i PauseScript.js script og legg til følgende, over enden av funksjon og over avslutt} klammeparentes.
//Viser en ' dobbel tid "-knappen if (GUI.Button (Rect (0,60,120,30)," Double Time ")) {//ring vår vippefunksjon Double (); }

Høyre. Vi har en knapp, la oss legge til at Double () -funksjonen:
funksjon Double () {//sett skalaen som tiden går til 0,5, kjører i slowmo Time.timeScale = 2;}

For moro, prøv justere tidsskala opp til 100 og se hva som skjer.


La oss ta lager av skriptet. Her er de PauseScript.js i full, bare i tilfelle noe dårlig skjedde underveis:
funksjon OnGUI () {//viser en "pause" knappen hvis (GUI.Button (Rect (0,0,120,30), " TOGGLE PAUSE ")) {//ring vår vippefunksjon doPauseToggle (); } //Viser en "slowmo" -knappen if (GUI.Button (Rect (0,30,80,30), "slowmo")) {//ring vår vippefunksjon slowmo (); } //Viser en "dobbel tid" -knappen if (GUI.Button (Rect (0,60,120,30), "Double Time")) {//ring vår vippefunksjon Double (); }} funksjon doPauseToggle () {//her vi sjekke for å se om vi kjører på en tidsskala over 0 hvis (Time.timeScale > 0) {//tidsskala er over null, så vi trenger å pause spillet her pauseGame (); } Else {//tidsskala var mindre enn null, så vi fortsette en spillet her unPauseGame (); }} funksjon pauseGame () {//sett skalaen som tiden går til 0, frysetiden Time.timeScale = 0 (!);} funksjon unPauseGame () {//sett skalaen som tiden går til en, kjører på realtime igjen Time.timeScale = 1;} funksjon slowmo () {//sett skalaen som tiden går til 0,1, kjører i slowmo Time.timeScale = 0,1;} funksjon Double () {//sett skalaen som tiden går til 0,5, løping i slowmo Time.timeScale = 2;!}



Avsluttende ord og et par Gotchas

Det er viktig å merke seg at Time.timeScale ikke vil påvirke kode i en Update () -funksjonen. Oppdatering finner sted hver "tick" og det skjer utenfor tidsskala, så hvis du trenger ting å skje som spillet er satt på pause, slik som bakgrunn animasjon, til stedet sette det er mest sannsynlig oppdatering. Sjekk dokumentasjonen Unity for mer informasjon om dette.

Merk at hvis du endrer Time.timeScale verdi, eventuelle tidsrelaterte handlinger som samtaler til Invoke-funksjonen eller eventuelle tidtakere som bruker verdier fra Time.time vil også bli berørt av endringen. Hvis spillet kjører på det dobbelte av hastigheten, må du halvere hastigheten på tidsbaserte handlinger (for eksempel hvis du har et racingspill med en etappetider og din Time.timeScale er satt til 2.0, må du forsinke etappetider av en halv time for å måle nøyaktig tid)

Fysikk reaksjoner ikke er direkte berørt, slik at spillet skal kjøre som det normalt ville kollisjoner og fysikk-messig -. bare på en annen tidsskala .

Det er det! Takk for å lese min rask spiss. Lek litt med Time.timeScale og jeg ser frem til å se kule Matrix-lignende effekter i prosjektene. Ha det gøy, noe som gjør spill! Anmeldelser