Er du klar for Unitytorial? Jeg tenkte det kunne være artig med en liten innføring i det som offesielt er det enkleste verktøyet for å mekke 3D-spill, nemlig Unity. Mål for dagen:
Faktisk... du kommer ikke så fryktelig langt her uten å prøve deg fram litt. Hvis det er noe du virkelig ikke forstår, så si fra sånn at jeg kan svare.
Før du begynner: Last ned og installer Unity. Skulle skrevet guide til det også, men ærlig talt: Hvis du ikke klarer det selv, spørs det hvor mye nytte du får av selve Unity.
En liten notis til: Jeg er ingen god programmerer, men jeg liker å dille med det uansett. Programmering er like mye et håndverk som en ferdighet; så lenge du driver nok med det, finner du gjerne dine egne måter å gjøre ting på, eller nye innfallsvinkler på gamle problemstillinger. Jeg forklarer ikke så mye av hvordan Unity fungerer under panseret (sjekk heller ut scripting-referansen på nettsida hvis du er interessert (bonus: Den referansen er innimellom rimelig utdatert, så kodeeksemplene ikke funker i nyeste Unity. Kos deg med det)), men jeg skal prøve å forklare konkret hva jeg gjør underveis uten at jeg går veldig inn i syntaks og sånt. Prøv å henge med, og hvis du føler du trenger å lære mer programmering, sjekk ut Codecademy eller andre ressurser.
Så, da er vi klare. Smell i gang Unity og så kjører vi.
Først av alt: Start et nytt prosjekt. Unity laster inn et demo-prosjekt første gang du kjører det, men vi skal starte helt fra bånn av så derfor...
Lagre prosjektet akkurat hvor du vil. Unity bruker en mappestruktur hvor selve prosjektet ditt er hele mappa du lager på harddisken, og alle filer du legger til i prosjektet legges på et passende sted i mappa. Ikke bruk Utforsker (eller hva det heter for noe fint på Mac) til å organisere denne mappa; Unity liker å gjøre det selv, så bruk utforskeren i selve Unity. En viktig ting når du mekker prosjektet ditt: Huk av på "Character Controller.unityPackage" under "Import the following packages". Vi skal bruke FPS-kontrolleren i denne pakka, og da er det kjekt å ha den med fra start. Ikke at du ikke kan legge den til seinere, men hvis du haker av her, slipper du det.
Etter litt jobbing får du opp selve Unity-vinduet. Hvis du har holdt på en liten stund, kan det se ut omtrent som dette:
Forvirrende? Frykt ikke. Her følger en kjapp gjennomgang.
Husk at hvert objekt i Unity kan tilknyttes flere ulike komponenter; i dette tilfellet de komponentene jeg listet opp tidligere. En Transform er bare et navn på alt som har med visning av et objekt i 3D-framstillingen å gjøre, det vil si selve 3D-modellen, rotasjon, skalering, posisjon og ymse annet. En Character Controller er - som navnet antyder - et standard Unity-objekt som lar spilleren styre en figur (som muligens også er en karakter, det er opp til deg). Skriptene er små snutter med programmeringskode som legger til bestemte funksjoner på objektet. I dette tilfellet ser du av navnene hva de ulike skriptene gjør, eller hva? Uansett, vi skal snart komme i gang med å skrive våre egne skript, jeg ville bare vise fram hvordan ting kan se ut etter en stund. Hvis du ikke skjønner bæret, prøv å følge med likevel, så forstår du forhåpentligvis mer underveis.
Vi går tilbake til vårt tomme prosjekt.
Som du ser, har vi bare den tomme scena (den er ikke lagret ennå, derfor finner du den ikke i utforskeren) og et Main Camera akkurat nå, i tillegg til Standard Assets-mappa. Før vi mekker en spillfigur, trenger vi et landskap figuren kan bevege seg rundt i. På menylinja øverst, velger du Terrain, og så Create Terrain. Legg merke til at terrenget legges til i hierarkiet og utforskeren, samt at det dukker opp i Inspector-vinduet øverst til høyre. Sjekk at terrenget er plassert på koordinatene 0,0,0 (altså: X = 0, Y = 0, Z = 0), at rotasjonen er det samme (0,0,0) og at skaleringen er 1,1,1. Rett opp verdiene i Inspector hvis de er feil.
Nå kan det hende at kameraet ikke er ideelt plassert. For å flytte på det, kan du - hold deg fast - holde inne høyre mustast i scenevisningen, og bruke WASD og musa for å flytte det rundt selv (hold inne Shift for at det ikke skal gå dritsakte). Sos rundt med kameraet til du har fin utsikt over terrenget ditt, eventuelt til du har fått nok.
Vel, nok tull: På tide å gjøre dette til et ordentlig spill. Et rimelig dølt spill, men samme det. Velg Standard Assets i utforskeren, utvid mappene nedover til du har åpnet mappa Character Controllers og kan velge First Person Controller. Klikk og dra den over i enten hierarkiet, eller scenevisningen.
For enkelhets skyld, pass på at du har valgt First Person Controller i hierarkiet, og sjekk Inspector-vinduet til høyre. Under "Position", endre verdiene slik at objektet er plassert på koordinatene X = 10, Y = 10, Z = 10. Og nå... trykk på Play-knappen midt i vinduet, øverst under menylinja. Jaggu! Bruker du WASD og musa nå, styrer du din helt egne spillfigur rundt i det megaspennende 3D-miljøet du selv har laget.
Ikke så fryktelig spennende, sier du? Makan til klaging. Uansett, vi får vel ordne litt på det, da. Velg Terrain i hierarkiet, og trykk på Terrain-menyen øverst. Velg Set Resolution, og sett både bredden og lengden på terrenget til 200 (standardverdien er 2000). Terrenget blir mye mindre da, og da er det litt lettere å håndtere til å begynne med. Bare overse de andre innstillingene (eller lek litt med dem hvis du skjønner hva de gjør). Så, med et litt mindre terreng, er det bare å... forme det.
Velg terrenget i hierarkiet hvis det ikke allerede er valgt, og trykk på knappen helt til venstre i Inspector (Raise/lower terrain). Velg en pensel og tegn og kluss litt på terrenget for å se hva som skjer (hint: høyden på terrenget endrer seg).
One does not simply walk into Mordor. Ahem. Uansett, det kan hende at FPS-kontrolleren din blir plassert under terrenget mens du går berserk med penselen. Velg den i hierarkiet og plasser den noen meter opp i lufta for å være sikker. Trykk nå for all del på Play igjen sånn at du kan bli mektig imponert over hvor sabla god du er til å designe spillverdener. HAHA kødda alt blir grått hvis du gjør det. Det er fordi scena di ikke har noe lys, og ingen teksturer. Best at vi fikser det, da.
Pass på at du IKKE har valgt terrenget, og klikk på Create i hierarkiet, så Directional Light. Nå har du akkurat lagt til en ny komponent i scena di, nemlig en lyskilde. Sjekk i Inspector at den vises i lista. Det er vanligvis ikke spesielt lurt å legge til lyskilder direkte på terrenget (punktlys må, naturlig nok, være egne objekter som kan plasseres rundt i scena istedenfor å være knyttet til et objekt), blant annet fordi du ikke kan endre plassering eller rotasjon på lyset. Gjør det nå, slik at du får det sånn du vil ha det (protip plasseringa har ingenting å si for retningsbaserte lys).
I Unity har du fire forskjellige lystyper. Du har Spot, som forhåpentligvis er selvforklarende; Point, som er omtrent som ei lyspære - altså, et enkelt lyspunkt som stråler lys i alle retninger; Directional, som brukes for å simulere retningsbasert lys som dekker hele scena likt; sollys, med andre ord. Eller månelys, da; og Area, som... vel, det er innbakte lys på brettgeometri, hvis det sier deg noe. Hvis ikke, ta det med ro: Områdelys krever Unity Pro siden du bare har tilgang til grunnleggende lysshadere i gratisversjonen av Unity. Uansett, velg lyset du akkurat lagde i Inspector, og endre innstillingene litt til du har et retningsbasert lys som ser koselig ut. Hvis en innstilling virker pussig, prøv deg fram eller bare overse den, du bestemmer.
Tid for litt dekor på selve terrenget. Åpne bilderedigeringsprogrammet du liker aller best, og lag noen fine teksturer til terrenget ditt (eller bare stjæl mine). En huskeregel er å bruke noenlunde kvadratiske teksturer - iallfall på terreng - og at toerpotenser er det du går for når du skal angi størrelse på bildet ditt. Et greit kompromiss mellom detaljnivå og minnebruk er 512x512, som jeg bruker. Unngå å lage alt for store teksturer til spillet ditt, med mindre du har uendelig mye minne på skjermkortet ditt (spoiler det har du ikke).
Sånn. Dra dem inn i utforskeren i Unity, så vil du se at de dukker opp der ganske umiddelbart. Siden det fort blir rotete at alt bare ligger og slenger i rotmappa, lag en egen mappe og sleng teksturene inn der.
Så, på tide å legge litt farge på terrenget. Velg terrenget i hierarkiet igjen, og i Inspector velger du malekost-knappen som heter "Paint the terrain texture". Før du kan male, må du velge teksturene dine ved å trykke på "Edit textures...". Legg til teksturene dine i tur og orden, så kan du male i vei ved å bytte mellom dem.
Prøv deg fram!
Majestetisk. Nåh, terrenget er så klart vel og bra, men hva med bygninger? Landsbyer? Hus? Jo, det må vi ha. Eller, ett hus iallfall, det tar pisslang tid å mekke hus. Ett får holde. Vi jukser litt, og lager et hus ved hjelp av kube-verktøyet i Unity (det går også helt fint an å modellere 3D-objekter med et 3D-program og importere dem, det fikser Unity automatisk). Velg et sted huset skal stå, og legg et fundament: En kube du forstørrer (enten via Inspector eller skaleringsverktøyet øverst til venstre) sånn at du har en fin, flat... flate å bygge på. Velg GameObject-menyen, Create Other, og Cube. Det tar litt tid å bli vant med 3D-editoren i Unity, og dette er et typisk tidspunkt hvor det slår inn. For hvor i fasiken ble det av den kuben? Sjekk i Inspector, finn koordinatene, og se om du kan skimte kuben i scenevinduet (den blir plassert en viss distanse foran kameraet ditt, så muligens under terrenget). Flytt den oppover, juks den litt fram og tilbake, til du får den der du vil ha den. Gjør den større. Kos deg.
Kuber (eller, altså, 3D-modeller), vettu, de ække terrenger vettu. De bruker ikke bare teksturer, de bruker materialer. Materialer KAN også inneholde teksturer, men... andre ting også. Spennende! Her har jeg laget en ny mappe (høyreklikk i utforsker), og et nytt material (også høyreklikk, se om du klarer å finne ut hvordan du mekker et material), og lagt det på kuben min (klikk og dra). Detta ække vanskelig, folkens. Siden du er så tøff, kan du til og med prøve deg på å redigere materialet i Inspector. Se hvilke effekter du kan få til (hint: du må prøve lista som heter Shader)!
Nå skal du få prøve deg fram selv. Mekk noen greier du kan hoppe rundt på. Et hus? Noen kasser? Pornografi? Du bestemmer. Legg til nye kuber (eller til og med sfærer, eller andre ting), og lag noen fine omgivelser. Se hva du får til.
NYDELIG. Nei, det ble ikke et hus, jeg veit. Gadd ikke. Uansett, hva mangler vi nå? Jo, kanskje det viktigste av alt: Drap. Et FPS uten skyting blir ikke mye tess. Da er det tid for litt proggings. Men! Bare rolig, hvis du synes dette er skummelt, bare heng med så kanskje du skjønner mer etter hvert.
Men først, en viktig ting: Prefabs. Unity har et konsept som kalles prefabs, altså ferdiglagde objekter, klare til bruk og - ikke minst - masseproduksjon. Tenk etter: Når du skal skyte kulene dine, så håndlager du ikke en og en kule, eller hva? Nei, du lager en kule, og så bare ber du om en ny av den når du skal ha flere. Akkurat som i virkeligheten. Prefabs kan kobles til dine egne scripts, og så bare mekker Unity dem automatisk for deg. Dette blir spennende, heng med.
Lag et nytt script (nå forteller jeg deg ikke hvordan du skal gjøre det, sånn at du må finne det ut selv). Pass på! Jeg bruker C#-scripts, men det går også an å bruke JavaScript eller noe som heter Boo som jeg ikke kjenner til. Det er ikke VELDIG store forskjeller på JavaScript og C#, og de er egentlig ganske kjedelige med mindre du er glad i programmering, så jeg hopper over å fortelle deg dem. Bare pass på at du enten gjør om scriptene mine til JavaScript/Boo hvis du heller vil bruke det, eller at du har valgt C# når du programmerer (protip: Det går an å bruke flere forskjellige typer scripts i samme spill uten at Unity klager).
Uansett, lag scriptet, kall det "Bullet Shooter" eller noe annet kreativt, og lag gjerne en egen mappe til det sånn at det blir fornøyd. Dobbelklikk på det for å redigere det. Obs! Unity bruker MonoDevelop, et gratis koderedigeringsprogram til å redigere koden. MonoDevelop er helt greit, men det er bare halvveis integrert med Unity. Rediger scriptet ditt, hvis du får noen røde feillinjer må du rette opp i noe. Så lagrer du, og så kjører du spillet ditt i Unity for å sjekke hva det gjorde. Nå skal jeg late som om jeg kan å programmere her, så følg med. Når du åpner scriptet, får du dette:
Hvis du ikke skjønner noe av dette, bare blås i det. Du lærer det etter hvert. Uansett: Koden i Start() kjøres når objektet først legges til i spillet (altså, ved starten av scena hvis det er plassert i scena, eller når det lastes inn av koden din). Vi bruker ikke Start() akkurat nå. Det vi skal gjøre, er å legge til kode som sjekker om venstre mustast blir trykket ned, og hvis så er tilfelle, skal spillet skyte en kule i den retningen kameraet er vendt. Vi begynner med å gjøre klar kula, og her kommer prefabs inn. Ved å lage en public-variabel, kan du endre den direkte i Unity; inklusive å sette referanser til prefabs. Det er helt gull, uansett om du forstår hva det innebærer eller ikke. Først legger du til denne koden i etter teksten MonoBehaviour {, men før teksten // Use this for initialization:
Nå har vi lagt inn koden for prefab-en vår, dvs. at vi kan legge til et objekt av typen Rigidbody som seinere kan brukes i koden under navnet bullet. Rigidbody er en av objekt-typene som brukes av fysikkmotoren til Unity. Så veit du det. Nå trenger vi å legge til koden som faktisk avfyrer kuler, så gå til Update() og skriv inn følgende mellom krøllparentesene i Update():
Sånn, ikke så vanskelig, eller hur? Skritt for skritt, så sjekker nå Update (som kjøres hver gang spillet oppdateres, dvs. rundt 60 ganger i sekundet hvis du går for 60fps) om en av knappene knyttet til handlingen "Fire1" er nedtrykket (du kan sjekke hvilke knapper dette gjelder ved å sjekke innstillingene til spillet ditt). Så, hvis det er tilfelle, lager spillet en ny Rigidbody kalt "projectile" (vi lager en ny sånn at scriptet kan få kontroll over den), ved å klone "bullet", og sette posisjonen og rotasjonen til det samme som objektet scriptet hører til. I neste linje setter scriptet hastigheten på prosjektilet til 20. 20 hva? Si det.
Nesten ferdig! Nå må vi lage kule-prefaben vår. Bare lag en ny sfære, krymp den ned litt, pynt den slik du vil ha den, og velg den i Unity-editoren. Nå kommer det vanskelige: Pass på at kula di er valgt, og så velger du Component-menyen, Physics, og så Rigidbody. Bæm. Og nå lager du en ny Prefab i utforskeren (igjen, dette må du klare å finne ut selv), drar kula di over i den, og SMOKK. Nå har du en prefab. Nå skal vi legge skytescriptet vårt på FPS-kontrolleren. Og her må du passe på. Velg First Person Controller i hierarkiet, og utvid den så du ser begge underobjektene (Graphics og Main Camera). Nå må du dra scriptet ditt over på Main Camera-objektet som hører inn under First Person Controller, sånn at det kan få tilgang til rotasjonen og plasseringen til kameraet.
Dette er litt knotete, og kanskje litt vrient å fatte, men bare hold ut så forklarer jeg mer seinere. Okay? Nå er alt som gjenstår, å velge Main Camera-komponenten under First Person Controller, og finne fram til skytescriptet ditt. Ser du feltet som heter "Bullet"? Nå drar du kule-prefaben din over på den plassen, og bæm.
Hvis du spiller spillet ditt nå, kan du skyte kulene dine rundt omkring med venstre mustast (Ctrl funker også). Du vil legge merke til at de spretter rundt som om de var fotballer, istedenfor å fyke av gårde i en geværkule-aktig bane. Dette kommer av at vi bare la til en Rigidbody på dem uten å tweake Rigidbodyen på noen som helst måte, forøvrig. Klarer du å endre på oppførselen til kulene uten å skrive en eneste linje med kode? Prøv deg fram. Klarer du å endre på hastigheten til kulene ved å endre litt på koden? Klarer du å avfyre flere kuler på en gang? Hmmm!
Uansett, dette var første del av Unitytorial. Hva har vi lært? Jeg har ikke lært så mye, men jeg håper du som har lest dette har lært litt om Unity. Som for eksempel at det er veldig enkelt å få i gang noe spillbart med det. Uten å bruke noen eksterne assets (bortsett fra teksturer) har vi nå et landskap, en spillfigur (implisitt om ikke eksplisitt), våpenspill (et særdeles spennende sådan), lekre omgivelser og... ikke så mye mer. Men! Dette er bare begynnelsen. Neste gang blir det fiender, AI (eller noe som kan minne om det på en god dag), bedre våpen, mer grafikk (kanskje så mye som femten flere grafikker), og kanskje andre greier. Har du kommentarer eller spørsmål? Ikke nøl med å spørre, altså.
- Å lage et svært enkelt førstepersonsskytespill med simulerte omgivelser, en spillerfigur og enkle grafiske effekter.
- Lære om Unity-grensesnittet og arbeidsflyten i Unity.
- Lære litt om hvordan man kan legge til sine egne programmeringsscripts i Unity.
- Lære om prefabs, som er en svært viktig funksjon i Unity.
Faktisk... du kommer ikke så fryktelig langt her uten å prøve deg fram litt. Hvis det er noe du virkelig ikke forstår, så si fra sånn at jeg kan svare.
Før du begynner: Last ned og installer Unity. Skulle skrevet guide til det også, men ærlig talt: Hvis du ikke klarer det selv, spørs det hvor mye nytte du får av selve Unity.
En liten notis til: Jeg er ingen god programmerer, men jeg liker å dille med det uansett. Programmering er like mye et håndverk som en ferdighet; så lenge du driver nok med det, finner du gjerne dine egne måter å gjøre ting på, eller nye innfallsvinkler på gamle problemstillinger. Jeg forklarer ikke så mye av hvordan Unity fungerer under panseret (sjekk heller ut scripting-referansen på nettsida hvis du er interessert (bonus: Den referansen er innimellom rimelig utdatert, så kodeeksemplene ikke funker i nyeste Unity. Kos deg med det)), men jeg skal prøve å forklare konkret hva jeg gjør underveis uten at jeg går veldig inn i syntaks og sånt. Prøv å henge med, og hvis du føler du trenger å lære mer programmering, sjekk ut Codecademy eller andre ressurser.
Så, da er vi klare. Smell i gang Unity og så kjører vi.
Først av alt: Start et nytt prosjekt. Unity laster inn et demo-prosjekt første gang du kjører det, men vi skal starte helt fra bånn av så derfor...

Lagre prosjektet akkurat hvor du vil. Unity bruker en mappestruktur hvor selve prosjektet ditt er hele mappa du lager på harddisken, og alle filer du legger til i prosjektet legges på et passende sted i mappa. Ikke bruk Utforsker (eller hva det heter for noe fint på Mac) til å organisere denne mappa; Unity liker å gjøre det selv, så bruk utforskeren i selve Unity. En viktig ting når du mekker prosjektet ditt: Huk av på "Character Controller.unityPackage" under "Import the following packages". Vi skal bruke FPS-kontrolleren i denne pakka, og da er det kjekt å ha den med fra start. Ikke at du ikke kan legge den til seinere, men hvis du haker av her, slipper du det.
Etter litt jobbing får du opp selve Unity-vinduet. Hvis du har holdt på en liten stund, kan det se ut omtrent som dette:

Forvirrende? Frykt ikke. Her følger en kjapp gjennomgang.
- Scene - Det store vinduet øverst til venstre. Dette er en forhåndstitt på den aktuelle scenen du har lastet inn for øyeblikket. Hvert Unity-program består av en eller flere scener, som igjen inneholder spillobjekter og annet dilldall. Du kan ikke ha et Unity-prosjekt uten en scene og et kamera som viser fram en del av scena, derfor er en tom scene og et standard-kamera de eneste objektene som lages automatisk i et tomt Unity-prosjekt.
- Project - den lille lista nede til høyre under scenevinduet. Dette er alle objektene spillet ditt inneholder. Må ikke forveksles med:
- Hierarchy - den lille lista nede til venstre under scenevinduet. Dette er hierarkiet for den gjeldende scena, altså alle objektene som finnes i scena du har lastet inn for øyeblikket. Arbeidsflyten i Unity er slik at du enten lager en ny Asset, GameObject eller Component (disse begrepene omfatter alle slags objekter du kan bruke i et Unity-prosjekt), og plasserer det i Project-lista. Deretter kan du dra objektet derfra og over i scena eller hierarkiet for å plassere det i den gjeldende scena. Forskjellene på Assets, Components, GameObjects og hurramegrundt er ikke så fryktelig nøye akkurat nå, vi tar det etter hvert.
- Inspector - sist men ikke minst, den (ofte) lange lista helt til høyre i vinduet. Denne lista viser alle Components som er tilknyttet det GameObject-et du har valgt i enten hierarkiet eller prosjektutforskeren.
Husk at hvert objekt i Unity kan tilknyttes flere ulike komponenter; i dette tilfellet de komponentene jeg listet opp tidligere. En Transform er bare et navn på alt som har med visning av et objekt i 3D-framstillingen å gjøre, det vil si selve 3D-modellen, rotasjon, skalering, posisjon og ymse annet. En Character Controller er - som navnet antyder - et standard Unity-objekt som lar spilleren styre en figur (som muligens også er en karakter, det er opp til deg). Skriptene er små snutter med programmeringskode som legger til bestemte funksjoner på objektet. I dette tilfellet ser du av navnene hva de ulike skriptene gjør, eller hva? Uansett, vi skal snart komme i gang med å skrive våre egne skript, jeg ville bare vise fram hvordan ting kan se ut etter en stund. Hvis du ikke skjønner bæret, prøv å følge med likevel, så forstår du forhåpentligvis mer underveis.
Vi går tilbake til vårt tomme prosjekt.

Som du ser, har vi bare den tomme scena (den er ikke lagret ennå, derfor finner du den ikke i utforskeren) og et Main Camera akkurat nå, i tillegg til Standard Assets-mappa. Før vi mekker en spillfigur, trenger vi et landskap figuren kan bevege seg rundt i. På menylinja øverst, velger du Terrain, og så Create Terrain. Legg merke til at terrenget legges til i hierarkiet og utforskeren, samt at det dukker opp i Inspector-vinduet øverst til høyre. Sjekk at terrenget er plassert på koordinatene 0,0,0 (altså: X = 0, Y = 0, Z = 0), at rotasjonen er det samme (0,0,0) og at skaleringen er 1,1,1. Rett opp verdiene i Inspector hvis de er feil.
Nå kan det hende at kameraet ikke er ideelt plassert. For å flytte på det, kan du - hold deg fast - holde inne høyre mustast i scenevisningen, og bruke WASD og musa for å flytte det rundt selv (hold inne Shift for at det ikke skal gå dritsakte). Sos rundt med kameraet til du har fin utsikt over terrenget ditt, eventuelt til du har fått nok.

Vel, nok tull: På tide å gjøre dette til et ordentlig spill. Et rimelig dølt spill, men samme det. Velg Standard Assets i utforskeren, utvid mappene nedover til du har åpnet mappa Character Controllers og kan velge First Person Controller. Klikk og dra den over i enten hierarkiet, eller scenevisningen.
For enkelhets skyld, pass på at du har valgt First Person Controller i hierarkiet, og sjekk Inspector-vinduet til høyre. Under "Position", endre verdiene slik at objektet er plassert på koordinatene X = 10, Y = 10, Z = 10. Og nå... trykk på Play-knappen midt i vinduet, øverst under menylinja. Jaggu! Bruker du WASD og musa nå, styrer du din helt egne spillfigur rundt i det megaspennende 3D-miljøet du selv har laget.
Ikke så fryktelig spennende, sier du? Makan til klaging. Uansett, vi får vel ordne litt på det, da. Velg Terrain i hierarkiet, og trykk på Terrain-menyen øverst. Velg Set Resolution, og sett både bredden og lengden på terrenget til 200 (standardverdien er 2000). Terrenget blir mye mindre da, og da er det litt lettere å håndtere til å begynne med. Bare overse de andre innstillingene (eller lek litt med dem hvis du skjønner hva de gjør). Så, med et litt mindre terreng, er det bare å... forme det.
Velg terrenget i hierarkiet hvis det ikke allerede er valgt, og trykk på knappen helt til venstre i Inspector (Raise/lower terrain). Velg en pensel og tegn og kluss litt på terrenget for å se hva som skjer (hint: høyden på terrenget endrer seg).

One does not simply walk into Mordor. Ahem. Uansett, det kan hende at FPS-kontrolleren din blir plassert under terrenget mens du går berserk med penselen. Velg den i hierarkiet og plasser den noen meter opp i lufta for å være sikker. Trykk nå for all del på Play igjen sånn at du kan bli mektig imponert over hvor sabla god du er til å designe spillverdener. HAHA kødda alt blir grått hvis du gjør det. Det er fordi scena di ikke har noe lys, og ingen teksturer. Best at vi fikser det, da.
Pass på at du IKKE har valgt terrenget, og klikk på Create i hierarkiet, så Directional Light. Nå har du akkurat lagt til en ny komponent i scena di, nemlig en lyskilde. Sjekk i Inspector at den vises i lista. Det er vanligvis ikke spesielt lurt å legge til lyskilder direkte på terrenget (punktlys må, naturlig nok, være egne objekter som kan plasseres rundt i scena istedenfor å være knyttet til et objekt), blant annet fordi du ikke kan endre plassering eller rotasjon på lyset. Gjør det nå, slik at du får det sånn du vil ha det (protip plasseringa har ingenting å si for retningsbaserte lys).
I Unity har du fire forskjellige lystyper. Du har Spot, som forhåpentligvis er selvforklarende; Point, som er omtrent som ei lyspære - altså, et enkelt lyspunkt som stråler lys i alle retninger; Directional, som brukes for å simulere retningsbasert lys som dekker hele scena likt; sollys, med andre ord. Eller månelys, da; og Area, som... vel, det er innbakte lys på brettgeometri, hvis det sier deg noe. Hvis ikke, ta det med ro: Områdelys krever Unity Pro siden du bare har tilgang til grunnleggende lysshadere i gratisversjonen av Unity. Uansett, velg lyset du akkurat lagde i Inspector, og endre innstillingene litt til du har et retningsbasert lys som ser koselig ut. Hvis en innstilling virker pussig, prøv deg fram eller bare overse den, du bestemmer.

Tid for litt dekor på selve terrenget. Åpne bilderedigeringsprogrammet du liker aller best, og lag noen fine teksturer til terrenget ditt (eller bare stjæl mine). En huskeregel er å bruke noenlunde kvadratiske teksturer - iallfall på terreng - og at toerpotenser er det du går for når du skal angi størrelse på bildet ditt. Et greit kompromiss mellom detaljnivå og minnebruk er 512x512, som jeg bruker. Unngå å lage alt for store teksturer til spillet ditt, med mindre du har uendelig mye minne på skjermkortet ditt (spoiler det har du ikke).



Sånn. Dra dem inn i utforskeren i Unity, så vil du se at de dukker opp der ganske umiddelbart. Siden det fort blir rotete at alt bare ligger og slenger i rotmappa, lag en egen mappe og sleng teksturene inn der.

Så, på tide å legge litt farge på terrenget. Velg terrenget i hierarkiet igjen, og i Inspector velger du malekost-knappen som heter "Paint the terrain texture". Før du kan male, må du velge teksturene dine ved å trykke på "Edit textures...". Legg til teksturene dine i tur og orden, så kan du male i vei ved å bytte mellom dem.
Prøv deg fram!

Majestetisk. Nåh, terrenget er så klart vel og bra, men hva med bygninger? Landsbyer? Hus? Jo, det må vi ha. Eller, ett hus iallfall, det tar pisslang tid å mekke hus. Ett får holde. Vi jukser litt, og lager et hus ved hjelp av kube-verktøyet i Unity (det går også helt fint an å modellere 3D-objekter med et 3D-program og importere dem, det fikser Unity automatisk). Velg et sted huset skal stå, og legg et fundament: En kube du forstørrer (enten via Inspector eller skaleringsverktøyet øverst til venstre) sånn at du har en fin, flat... flate å bygge på. Velg GameObject-menyen, Create Other, og Cube. Det tar litt tid å bli vant med 3D-editoren i Unity, og dette er et typisk tidspunkt hvor det slår inn. For hvor i fasiken ble det av den kuben? Sjekk i Inspector, finn koordinatene, og se om du kan skimte kuben i scenevinduet (den blir plassert en viss distanse foran kameraet ditt, så muligens under terrenget). Flytt den oppover, juks den litt fram og tilbake, til du får den der du vil ha den. Gjør den større. Kos deg.

Kuber (eller, altså, 3D-modeller), vettu, de ække terrenger vettu. De bruker ikke bare teksturer, de bruker materialer. Materialer KAN også inneholde teksturer, men... andre ting også. Spennende! Her har jeg laget en ny mappe (høyreklikk i utforsker), og et nytt material (også høyreklikk, se om du klarer å finne ut hvordan du mekker et material), og lagt det på kuben min (klikk og dra). Detta ække vanskelig, folkens. Siden du er så tøff, kan du til og med prøve deg på å redigere materialet i Inspector. Se hvilke effekter du kan få til (hint: du må prøve lista som heter Shader)!
Nå skal du få prøve deg fram selv. Mekk noen greier du kan hoppe rundt på. Et hus? Noen kasser? Pornografi? Du bestemmer. Legg til nye kuber (eller til og med sfærer, eller andre ting), og lag noen fine omgivelser. Se hva du får til.

NYDELIG. Nei, det ble ikke et hus, jeg veit. Gadd ikke. Uansett, hva mangler vi nå? Jo, kanskje det viktigste av alt: Drap. Et FPS uten skyting blir ikke mye tess. Da er det tid for litt proggings. Men! Bare rolig, hvis du synes dette er skummelt, bare heng med så kanskje du skjønner mer etter hvert.
Men først, en viktig ting: Prefabs. Unity har et konsept som kalles prefabs, altså ferdiglagde objekter, klare til bruk og - ikke minst - masseproduksjon. Tenk etter: Når du skal skyte kulene dine, så håndlager du ikke en og en kule, eller hva? Nei, du lager en kule, og så bare ber du om en ny av den når du skal ha flere. Akkurat som i virkeligheten. Prefabs kan kobles til dine egne scripts, og så bare mekker Unity dem automatisk for deg. Dette blir spennende, heng med.
Lag et nytt script (nå forteller jeg deg ikke hvordan du skal gjøre det, sånn at du må finne det ut selv). Pass på! Jeg bruker C#-scripts, men det går også an å bruke JavaScript eller noe som heter Boo som jeg ikke kjenner til. Det er ikke VELDIG store forskjeller på JavaScript og C#, og de er egentlig ganske kjedelige med mindre du er glad i programmering, så jeg hopper over å fortelle deg dem. Bare pass på at du enten gjør om scriptene mine til JavaScript/Boo hvis du heller vil bruke det, eller at du har valgt C# når du programmerer (protip: Det går an å bruke flere forskjellige typer scripts i samme spill uten at Unity klager).
Uansett, lag scriptet, kall det "Bullet Shooter" eller noe annet kreativt, og lag gjerne en egen mappe til det sånn at det blir fornøyd. Dobbelklikk på det for å redigere det. Obs! Unity bruker MonoDevelop, et gratis koderedigeringsprogram til å redigere koden. MonoDevelop er helt greit, men det er bare halvveis integrert med Unity. Rediger scriptet ditt, hvis du får noen røde feillinjer må du rette opp i noe. Så lagrer du, og så kjører du spillet ditt i Unity for å sjekke hva det gjorde. Nå skal jeg late som om jeg kan å programmere her, så følg med. Når du åpner scriptet, får du dette:
Kode:
using UnityEngine;
using System.Collections;
public class BulletShooter : MonoBehaviour {
// Use this for initialization
void Start () {
}
// Update is called once per frame
void Update () {
}
}
Kode:
public Rigidbody bullet;
Kode:
if (Input.GetButtonDown ("Fire1"))
{
Rigidbody projectile = (Rigidbody)Instantiate(bullet, transform.position, transform.rotation);
projectile.velocity = transform.TransformDirection (Vector3.forward * 20);
}
Nesten ferdig! Nå må vi lage kule-prefaben vår. Bare lag en ny sfære, krymp den ned litt, pynt den slik du vil ha den, og velg den i Unity-editoren. Nå kommer det vanskelige: Pass på at kula di er valgt, og så velger du Component-menyen, Physics, og så Rigidbody. Bæm. Og nå lager du en ny Prefab i utforskeren (igjen, dette må du klare å finne ut selv), drar kula di over i den, og SMOKK. Nå har du en prefab. Nå skal vi legge skytescriptet vårt på FPS-kontrolleren. Og her må du passe på. Velg First Person Controller i hierarkiet, og utvid den så du ser begge underobjektene (Graphics og Main Camera). Nå må du dra scriptet ditt over på Main Camera-objektet som hører inn under First Person Controller, sånn at det kan få tilgang til rotasjonen og plasseringen til kameraet.
Dette er litt knotete, og kanskje litt vrient å fatte, men bare hold ut så forklarer jeg mer seinere. Okay? Nå er alt som gjenstår, å velge Main Camera-komponenten under First Person Controller, og finne fram til skytescriptet ditt. Ser du feltet som heter "Bullet"? Nå drar du kule-prefaben din over på den plassen, og bæm.

Hvis du spiller spillet ditt nå, kan du skyte kulene dine rundt omkring med venstre mustast (Ctrl funker også). Du vil legge merke til at de spretter rundt som om de var fotballer, istedenfor å fyke av gårde i en geværkule-aktig bane. Dette kommer av at vi bare la til en Rigidbody på dem uten å tweake Rigidbodyen på noen som helst måte, forøvrig. Klarer du å endre på oppførselen til kulene uten å skrive en eneste linje med kode? Prøv deg fram. Klarer du å endre på hastigheten til kulene ved å endre litt på koden? Klarer du å avfyre flere kuler på en gang? Hmmm!
Uansett, dette var første del av Unitytorial. Hva har vi lært? Jeg har ikke lært så mye, men jeg håper du som har lest dette har lært litt om Unity. Som for eksempel at det er veldig enkelt å få i gang noe spillbart med det. Uten å bruke noen eksterne assets (bortsett fra teksturer) har vi nå et landskap, en spillfigur (implisitt om ikke eksplisitt), våpenspill (et særdeles spennende sådan), lekre omgivelser og... ikke så mye mer. Men! Dette er bare begynnelsen. Neste gang blir det fiender, AI (eller noe som kan minne om det på en god dag), bedre våpen, mer grafikk (kanskje så mye som femten flere grafikker), og kanskje andre greier. Har du kommentarer eller spørsmål? Ikke nøl med å spørre, altså.