The Smoke & Mirrors of Good Countdowns, Del 1

Hva du skal skape

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å!

Formålet med nedtellingene

Timere i spill kan tjene forskjellige formål, som ikke nødvendigvis overlapper applikasjoner. Disse er:

  1. Du har X tid til å utføre en oppgave.
  2. Du må overleve for X tid.

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.

Slik forbedrer du nedtellingene

La oss nå se på elementer som gjør nedtelling og timere mer interessante og engasjerende.

1: Lag din egen timer som ikke stole på tall og legg inn timeren til verden

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".

Ikke-numerisk nedtelling fra Star Trek Generations. Den nøyaktige tiden er ikke lett lesbar, men grafikken lar en seer enkelt trekke ut at en nedtelling skjer, og tiden løper ut

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.

Full kostnad for en teleport i Halvt liv 2. Elementet er svært synlig inne i det ellers sparsomt dekorerte rommet.

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 gameworld

2: Gjør tallene ser ut som tall

Få 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.

3: Gi spilleren beløpet i sekunder, ikke i minutter

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.

Valgfrie mini-oppdrag i Metal Gear Solid V: Phantom Pain. Tiden er gitt i sekunder, og skjuler beløpet i minutter

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.

4: Lag et "minutt" 100 sekunder langt

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.

En nedtelling brukt i Metal Gear Solid 2: Frihetssønner. Legg merke til at tallene vises igjen i totalt sekunder, men på en måte som ligner øyeblikkelige og sekundære tellere. Mens det andre symbolet (") også er vist, er det unge målet demografisk muligens ikke kjent med det.

5: Bruke millisekunder og fraksjoner for å legge til spenning

Å 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.

6: Bruk farge til din fordel!

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.

Rød nedtelling fra Metal Gear Solid V: Phantom Pain

La oss bygge en enkel timer med disse tingene!

La oss nå begynne å forbedre timeren via kode. Vi vil gjøre dette:

En grunnleggende timervisning

Inn i dette

Våre forbedrede timervisning

Vi 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å!

Oppsett og grunnleggende timer

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.

Ha det til å stoppe ved 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.

Få bedre numre

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!

Fest antall tall

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.

Gjør fargeendringen

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.

Konklusjon

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.