Nedräkningar är enkla element som förekommer i många spel, men deras design kan lätt överskådas.
Med några enkla tillägg kan dock en vanlig timer göras mycket mer engagerande och passande universum av spelet som presenteras och därmed starkt förbättra spelarens upplevelse.
Många av dessa element är inspirerade av samtalet "Juice it or lose it" av Martin Jonasson och Petri Purho om hur man gör ditt spel "juicier". Grunden är att det inte räcker att bara presentera informationen i sin mest basform. du måste också förbättra och accentuera vad som händer med färg, ljud och rörelse, vilket gör hela upplevelsen mycket mer engagerande. Jag rekommenderar helt och hållet att titta på att prata med att också lära sig om andra applikationer.
I denna tvådelade serie kommer vi att gå igenom dessa element och sedan implementera dem i ett enkelt Unity-projekt, för vilket du behöver den senaste versionen. I den kommande delen 2 kommer vi att titta på mer detaljerade och nyanserade element.
Redo? Nu går vi!
Timers i spel kan tjäna olika syften, som inte nödvändigtvis överlappar applikationer. Dessa är:
Utformningen av en timer kan växla mellan de två, eftersom informationen som är nödvändig för spelaren ändras i dess tillämpning.
När du får fem minuter att designa en bomb i Metal Gear Solid 2, du måste känna till exakt den tid du har, eftersom varje sekund blir avgörande för den övergripande utvecklingen och planeringen. Timern måste överföra till spelaren hur mycket som är kvar och varna dem om det blir mycket lågt.
När du måste hålla ut för en viss tid blir detta element av exakthet mindre viktigt. Medan det självklart skulle vara trevligt att veta exakt hur mycket tid på sekunder du behöver överleva, kan spelet också fungera utan den informationen. Det kan till och med förbättras, som en bit av information som "du måste hålla ut för bara några sekunder mer!" är lättare att förstå i en stressig situation än att "läs denna nummeravläsning i hörnet av skärmen" och kan förbättra fördjupningen inom spelvärlden.
Låt oss nu titta på element som gör nedräkningar och timers mer intressanta och engagerande.
Istället för att bara sätta ett nummer någonstans kan du skapa din egen nedräkningstabell som kommer att berätta för användaren ungefär hur mycket tid som är kvar.
En grafisk 2D-implementering kommer att kräva viss finess, eftersom du måste se till att spelaren kan korrekt intuitera och läsa idén om "tiden går slut och du har ungefär X sekunder kvar".
Det fungerar väldigt bra om du använder miljöindikatorer för att visa framsteg, och har i spel-rösterna berätta hur mycket som är kvar. Ett nummer som klistras upp på skärmen kan känna sig icke-dystiskt och kan mycket väl ta några spelare ur spelet.
I Halva livet 2, till exempel måste du försvara en position tills en teleporter har laddat. I början visas en full laddning, som sedan måste fyllas på igen.
Laddningen visas genom att maskinens delar lyser och börjar snurra, vilket ger dig en rudimentär klocka som förmedlar hur mycket längre du måste hålla ut.
Efter att ha använts måste teleporten ladda. Elementen sakta lyser upp igen, vilket ger spelaren en indikation hur mycket längre de måste hålla ut (från Halva livet 2)Teleporteravgiften är också ett bra exempel på en inbäddad display, som är direkt i spelvärlden. Dessa är användbara eftersom de håller spelaren inriktad på världen själv, medan en timer på ett GUI-lager skulle ligga ovanför spelvärlden.
En syre timer i Metro: Last Light, direkt inuti spelvärldenFå en cool typsnitt för dina nedräkningar! Vissa teckensnitt som den här digitala bildskärmens teckensnitt efterliknar äldre lysbildskärmar, vilka oftast användes för nummer i gamla "digitala" bildskärmar.
Spelaren kommer redan att associera dessa teckensnitt med timers och nedräkningar, och det kommer att göra att läsa det mycket enklare, som om det var i något som Arial eller Times New Roman.
Grundläggande läsbarhet och textkomposition gäller också. Stack inte siffrorna vertikalt, använd inte romerska siffror osv.
Metal Gear Solid serien gör detta underbara trick där de säger "du har bara 500 sekunder kvar!" och visa sedan ett nummer som läser som "5:00".
När jag spelade det för första gången, avslutade mitt sinne automatiskt detta för att läsa som "5 minuter", men det lurades. "500 sekunder" är ett ovanligt men ändå korrekt format för tiden, och folk i allmänhet är inte utbildade för att kunna hämta detta korrekt.
Effekten är att spelarna kommer att tro att de bara har 5 minuter, medan det i själva verket är 8 minuter och 20 sekunder.
Detta har vanligtvis inga nackdelar, eftersom de kommer att vara ansträngda av den snäva tidsgränsen och koncentrera sig på att utföra uppgiften (i Metal Gear Solid 2: defusing bombs), vilket kommer att distrahera dem från det faktum att fem minuter kan ha gått, och det finns fortfarande tid.
Detta går hand i hand med att tala om för spelaren hur lång tid som är kvar i sekunder.
Ett återkommande element i MGS2 nedräkningar är att de inte har 60-sekunders omsättning, men 100-sekunders "omsättning". Det här är faktiskt inte en minut som går över till nästa, men sekunderna är listade. Så istället för 01:00 blir 00:59 är det 0100 som blir 0099. Du behöver bara få värdet själv, vilket gör en nedräkning faktiskt lättare att skapa, eftersom du kan hoppa över minutberäkningen.
Att ha millisekunder som visas efter huvudnumret gör det mycket mer intressant!
Det här är ganska enkelt, eftersom tiden kan lagras i en flottör redan. Två till tre flytande punkttal är en bra mängd som fortfarande är läsbar och potentiellt användbar för spelaren.
När timern når en viss låg mängd, färga texten annorlunda. Göra det gult fungerar bra, eftersom det gör att timern sticker ut mer.
När den når sina sista sekunder, gör den röd, större och blixt. Nu kan det låga beloppet inte ignoreras, och det skapar spänning i spelaren.
Låt oss nu börja om hur man förbättrar en timer via kod. Vi kommer att göra det här:
In i detta:
Vår förbättrade timervisningVi använder några speciella tillgångar som du snabbt kan få eller skapa själv, eller få från källfilerna du kan hämta längst upp till höger om den här artikeln.
Redo? Nu går vi!
Starta Unity och skapa ett nytt projekt.
Skapa sedan ett tomt spelobjekt, placera det framför kameran och lägg till en textMesh via Komponent> Mesh> TextMesh till det. Detta kommer att bli displayen för timern i spelvärlden.
Vi använder 3d-textmesh för nu, men det kommer också att fungera på andra områden, som det grundläggande Unity-gränssnittet. För nu har 3d-texten också den fördel det kan vara inuti Gameworld, som nämnts tidigare, och inte överst av världen inuti ett GUI-lager.
Vår nya 3d-text kommer inte att visas omedelbart; Vi behöver ändra några värden.
Ställ teckenstorleken på 0,1, ankaren till mitt till vänster, anpassningen till Centrum, och teckensnittstorleken till 80. Lägg också till lite platshållare i fältet "text". Detta är bara så vi har något att titta på i redaktören; Under den verkliga spelningen kommer detta att anpassas direkt via kod. 00:00 kommer att göra bra.
Skapa sedan en ny fil som heter Countdown.cs, lägg till det i vårt timer-objekt och lägg till den här koden till det:
använder UnityEngine; Använda System.Collections; allmän klass Nedräkning: MonoBehaviour float timer = 120f; void Update () timer - = Time.deltaTime; GetComponent() .text = timer.ToString ();
Vi har en variabel med namnet timer, vilket kommer att hålla tiden som räknas ner. Just nu är det på 120 sekunder eller 2 minuter. Sedan i Uppdatering
funktion, som kallas varje ram, drar vi av Time.deltaTime
. Det här är en genväg för att få den faktiskt förflutna tiden där inne. Efter det får vi textMesh
komponent från objektet och anpassa dess text
värdet för att vara timer, förvandlas till en sträng.
När du nu kör spelet, visar textmesh numret minskande. grattis! Du har byggt en rudimentär timer.
Men det är långt ifrån att vara engagerande än. Det visar också 4 till 5 nummer efter decimaltalet, och det fortsätter att gå in i negativa värden efter att ha nått noll.
En negativ timer kommer att se sönder, så låt oss se till att det inte händer. Anpassa Uppdatering
funktion att se så här ut:
om (timer> 0f) timer - = Time.deltaTime; annars timer = 0f; GetComponent() .text = timer.ToString ();
Detta kommer bara att minska timern om det verkligen är positivt. Skulle det ändå bli negativt (vilket kan hända när det subtraherar den förflutna tiden) kommer den att ställas in på noll.
Kom ihåg att cool Digital Display Font jag nämnde ovan? Hämta det och lägg till det i ditt projekt!
Textmesh-sektionen i inspektören har ett fält för teckensnittet, så dra teckensnittet från dina tillgångar där.
Och nu ser vår timer så snyggare ut!
Just nu varierar antalet siffror efter decimalpunkten, vilket gör att timern fluktuerar vilt. Lös det genom att anpassa linjen som gäller värdet till texten så här:
GetComponent() .text = timer.ToString ("F2");
Detta avbryter automatiskt allt efter två siffror, som ständigt visar dig tiotalshundratals sekunder.
Låt oss lägga till lite adaptiv färgning! Anpassa Uppdatering
funktion att se så här ut:
om (timer> 0f) timer - = Time.deltaTime; annars timer = 0f; om (timer < 10f) GetComponent() .färg = Color.red; annars om (timer < 20f) GetComponent () .färg = Color.yellow; GetComponent () .text = timer.ToString ("F2");
Och timern blir gul när mindre än 20 sekunder är kvar och röd när mindre än 10 sekunder är kvar.
Hela Countdown.cs-filen ska se så här ut:
använder UnityEngine; Använda System.Collections; offentlig klass Nedräkning: MonoBehaviour float timer = 60f; offentliga AudioClip soundBlip; void Update () if (timer> 0f) timer - = Time.deltaTime; annars timer = 0f; om (timer < 10f) GetComponent() .färg = Color.red; annars om (timer < 20f) GetComponent () .färg = Color.yellow; GetComponent () .text = timer.ToString ("F2");
Och det är allt! Vi har nu en mycket mer engagerande och intressant nedräkning.
Du kan också titta på det fullständiga projektet i källfilerna längst upp till höger om den här artikeln.
Vi kollade på flera element som förbättrar timers i spel, vars lektioner också kan tillämpas på många andra element. Dessutom kan timern vi byggt enkelt anpassas och slås in i någon form av spel och det blir ett intressant element utan att du behöver utveckla innehållet igen.
Men det finns mer! I nästa del av denna serie tittar vi på ännu fler element och fortsätter att förbättra vår tidtabell.