Countdowns er enkle elementer som vises i mange spill, men deres design kan lett overses.
Med noen få enkle tillegg kan en vanlig timer gjøres mye mer engasjerende og tilpasset universet av spillet som presenteres, og forbedrer dermed spillernes opplevelse sterkt..
Mange av disse elementene er inspirert av samtalen "Juice it or lose it" av Martin Jonasson og Petri Purho om hvordan du gjør spillet ditt "juicier". Bunnlinjen er at det ikke er nok å bare presentere informasjonen i sin mest basale form; Du må også forbedre og fremheve hva som skjer med farge, lyder og bevegelse, noe som vil gjøre hele opplevelsen mye mer engasjerende. Jeg anbefaler absolutt å se det snakkes om å lære om andre applikasjoner.
I denne todelte serien vil vi gå gjennom disse elementene og deretter implementere dem i et enkelt Unity-prosjekt, for hvilket du trenger den nyeste versjonen. I kommende del 2 vil vi se på mer detaljerte og nyanserte elementer.
Klar? La oss gå!
Timere i spill kan tjene forskjellige formål, som ikke nødvendigvis overlapper applikasjoner. Disse er:
Utformingen av en timer kan skifte mellom de to, ettersom informasjonen som er nødvendig for spilleren endrer seg i applikasjonen.
Når du får fem minutter til å despisere en bombe i Metal Gear Solid 2, du trenger å vite nøyaktig hvor mye tid du har, som hvert sekund blir viktig for den generelle utviklingen og planleggingen. Timeren må overføre til spilleren hvor mye som er igjen, og for å varsle dem om dette beløpet blir kritisk lavt.
Når du må holde ut i en viss tid, blir det elementet av nøyaktighet mindre viktig. Selv om det selvfølgelig ville være fint å vite nøyaktig hvor mye tid i sekunder du trenger for å overleve, kan spillet også fungere uten denne informasjonen. Det kan til og med bli bedre, som et stykke informasjon som "du må holde ut i bare noen få sekunder mer!" blir lettere forstått i en stressende situasjon enn "vennligst les denne nummeravlesningen i hjørnet av skjermen", og kan forbedre nedsenking i spillverdenen.
La oss nå se på elementer som gjør nedtelling og timere mer interessante og engasjerende.
I stedet for bare å sette et nummer et sted, kan du lage din egen nedtelling grafikk som vil fortelle brukeren omtrent hvor mye tid er igjen.
En grafisk, 2D-implementering vil kreve litt finesse, siden du må sørge for at spilleren kan riktig intuitere og lese ideen om "tiden går tom, og du har omtrent X sekunder igjen".
Dette fungerer veldig bra hvis du bruker miljøindikatorer for å vise fremdriften, og har stemmer i spillet forteller deg hvor mye som er igjen. Et nummer som er klistret på toppen av skjermen, kan føle seg ikke-døgetisk og kan godt ta noen spillere ut av spillet.
I Halvt liv 2, For eksempel må du forsvare en posisjon til en teleporter har ladet seg betale. I begynnelsen vises en full ladning, som da må fylles på igjen.
Ladingen vises ved hjelp av elementer i maskinen som lyser opp og begynner å snurre, noe som gir deg en rudimentær klokke som formidler hvor mye lenger du må holde ut.
Etter å ha blitt brukt, må teleporten lades opp. Elementene lyser sakte igjen, og gir spilleren en indikasjon hvor mye lenger de må holde ut (fra Halvt liv 2)Teleporterladningen er også et godt eksempel på en en del av skjerm, som er direkte i spillverdenen. Disse er nyttige som de holder spilleren fokusert på verden selv, mens en timer på et GUI-lag ville være på toppen av spillverdenen.
En oksygen timer i T-banen igår, direkte inne i gameworldFå en kul skrift for nedtellingen din! Enkelte skrifter som denne Digital Display Font etterligner eldre lysbilder, som for det meste ble brukt til tall i gamle "digitale" skjermer.
Spilleren vil allerede knytte disse skriftene med timere og nedtellingene, og det vil gjøre det enklere å lese det, som om det var noe som Arial eller Times New Roman.
Grunnleggende lesbarhet og tekstsammensetning gjelder også. Ikke stakk tallene vertikalt, bruk ikke romerske tall osv.
Metal Gear Solid serien gjør dette fantastiske trikset der de sier "du har bare 500 sekunder igjen!" og deretter vise et nummer som leser som "5:00".
Da jeg spilte det for første gang, ble tankene mine automatisk ferdig med å lese som "5 minutter", men det ble lurt. "500 sekunder" er et uvanlig, men likevel riktig format for tiden, og folk generelt er ikke trent til å hente riktig på dette.
Effekten er at spillerne vil tro at de bare har 5 minutter, mens det faktisk er 8 minutter og 20 sekunder.
Dette har vanligvis ingen ulemper, da de vil bli ansporet av den stramme tidsgrensen og konsentrere seg om å utføre oppgaven (i Metal Gear Solid 2: defusing bombs), som vil distrahere dem fra det faktum at fem minutter kan ha gått, og det er fortsatt tid.
Dette går hånd i hånd med å fortelle spilleren hvor mye tid som er igjen i sekunder.
Et gjentagende element i MGS2 nedtellingen er at de ikke har 60 sekunders omsetning, men 100-sekunders "omsetning". Dette er egentlig ikke et øyeblikk som går over til det neste, men sekundene blir oppført. Så i stedet for 01:00 blir 00:59, er det 0100 som blir 0099. Du må bare få verdien selv, noe som gjør nedtellingen faktisk enklere å lage, siden du kan hoppe over minuttberegningen.
Å ha millisekunder som vises etter hovednummeret gjør det mye mer interessant!
Dette er ganske enkelt, siden tiden kan lagres i en flyte allerede. To til tre flytende poengstall er en god mengde som fortsatt er lesbar og potensielt nyttig for spilleren.
Når tidtakeren når en viss lav mengde, farger du teksten annerledes. Å gjøre det gult fungerer bra, da det gjør at timeren skiller seg ut mer.
Når den når sine siste sekunder, gjør den rød, større og blits. Nå kan det lave beløpet ikke ignoreres, og det skaper spenning i spilleren.
La oss nå begynne å forbedre timeren via kode. Vi vil gjøre dette:
Inn i dette
Våre forbedrede timervisningVi vil bruke noen spesielle eiendeler som du raskt kan få eller lage selv, eller få fra kildefilene du kan laste ned øverst til høyre i denne artikkelen.
Klar? La oss gå!
Start opp Enhet og opprett et nytt prosjekt.
Deretter oppretter du et tomt spillobjekt, legg det foran kameraet, og legg til en textMesh via Komponent> Mesh> TextMesh til det. Dette blir skjermen for timeren i spillverdenen.
Vi bruker 3d-tekstmesh for nå, men dette vil også fungere på andre områder, som det grunnleggende Unity-grensesnittet. For nå har 3d-teksten også den fordelen at den kan være innsiden Gameworld, som nevnt tidligere, og ikke på toppen av verden inne i et GUI-lag.
Vår nye 3d-tekst vil ikke bli vist umiddelbart. Vi må endre noen få verdier.
Sett karakterstørrelsen til 0.1, ankeret til midt til venstre, justeringen til senter, og skriftstørrelsen til 80. Legg også til litt plassholdertekst i "tekst" -feltet. Dette er bare så vi har noe å se på i redaktøren; Under selve spillingen vil dette bli direkte tilpasset via kode. 00:00 vil gjøre pent.
Deretter oppretter du en ny fil som heter Countdown.cs, legg det til timeren-objektet, og legg til denne koden til det:
bruker UnityEngine; bruker System.Collections; offentlig klasse Nedtelling: MonoBehaviour float timer = 120f; ugyldig oppdatering () timer - = Time.deltaTime; GetComponent() .text = timer.ToString ();
Vi har en variabel kalt timer, som vil holde tiden som teller ned. Akkurat nå er det på 120 sekunder eller 2 minutter. Så i Oppdater
funksjon, som kalles hver ramme, trekker vi av Time.deltaTime
. Dette er en snarvei for å få den faktiske forløpte tiden der inne. Etter det får vi textMesh
komponent fra objektet og tilpasse dens tekst
Verdien for å være tidtakeren, forvandlet til en streng.
Når du nå kjører spillet, vil tekstmesh vise nummeret redusere. Gratulerer! Du har bygget en rudimentær timer.
Men det er langt fra å være engasjerende ennå. Det viser også 4 til 5 tall etter desimaltegnet, og det vil fortsette å gå inn i negative verdier etter å ha nådd null.
En negativ timer vil se ødelagt, så la oss sørge for at det ikke skjer. Tilpass Oppdater
funksjon for å se slik ut:
hvis (timer> 0f) timer - = Time.deltaTime; ellers timer = 0f; GetComponent() .text = timer.ToString ();
Dette vil bare redusere timeren hvis den faktisk er positiv. Skulle det likevel bli negativt (som kan skje når det trekker den forløpte tiden), blir den satt til null.
Husk at kule Digital Display Font jeg nevnte ovenfor? Gå hente det og legg det til prosjektet ditt!
Tekstmesh-delen i inspektøren har et felt for skrifttypen, så dra fonten fra dine eiendeler der.
Og nå vil timeren vår se nærmere ut!
Akkurat nå varierer mengden tall etter desimaltegnet, noe som gjør at timeren svinger vilt. Løs det ved å tilpasse linjen som gjelder verdien til teksten for å se slik ut:
GetComponent() .text = timer.ToString ("F2");
Dette vil automatisk kutte av alt etter to tall, og viser deg hele tusenvis av sekunder.
La oss legge til litt adaptiv farging! Tilpass Oppdater
funksjon for å se slik ut:
hvis (timer> 0f) timer - = Time.deltaTime; ellers timer = 0f; hvis (timer < 10f) GetComponent() .color = Color.red; annet hvis (timer < 20f) GetComponent () .color = Color.yellow; GetComponent () .text = timer.ToString ("F2");
Og timeren blir gul når mindre enn 20 sekunder er igjen, og rød når mindre enn 10 sekunder er igjen.
Hele Countdown.cs-filen skal se slik ut:
bruker UnityEngine; bruker System.Collections; offentlig klasse Nedtelling: MonoBehaviour float timer = 60f; offentlig lydklip soundBlip; ugyldig oppdatering () hvis (timer> 0f) timer - = Time.deltaTime; ellers timer = 0f; hvis (timer < 10f) GetComponent() .color = Color.red; annet hvis (timer < 20f) GetComponent () .color = Color.yellow; GetComponent () .text = timer.ToString ("F2");
Og det er det! Vi har nå en mye mer engasjerende og interessant nedtelling.
Du kan også se på det komplette prosjektet i kildefilene øverst til høyre i denne artikkelen.
Vi tok en titt på flere elementer som vil forbedre timere i spill, hvor leksjonene også kan brukes på mange andre elementer. I tillegg kan timeren vi bygget enkelt tilpasses og slås inn i et hvilket som helst spill, og det vil være et interessant element uten at du må utvikle innholdet igjen.
Men det er mer! I neste del av denne serien vil vi se på enda flere elementer og fortsette å forbedre timeren vår.