Lag et spill med Blender – del 1

(Del 2)

Det første en bør gjøre når en skal lage et spill er å tenke ut hva det skal handle om, hvilke problemer som spilleren skal løse og hvordan de løses. Dette spillet har følgende scenario:

I et hus er det 2 rom. I hvert rom er det en kule, som spilleren må plukke opp (ved å kollidere med kulen) for å komme videre til neste rom og til slutt vinne og avslutte spillet. Hindringene i spillet består av huller i gulvet, som spilleren må unngå å falle ned i. I tillegg er det bevegende roboter i rommene, som spilleren må unngå å bli truffet av for ikke å bli dyttet ned i hullene. Dersom spilleren faller ned i et hull, må spilleren starte på nytt i rommet hvor han/hun befinner seg. Spillet er av «FPS»-typen (First Person Shooter); det vil si at spilleren styrer kameraet og har følelsen av å bevege seg i rommet.

Dersom du ikke er kjent med de grunnleggende funksjonene i Blenders spill motor, så les litt mer i artikkelen «Interaktiv 3d-presentasjon med Blender» i avsnittet ‘Interaktivitet’.
Last ned blender-fila (med lyder og teksturer) til spillet her.

Spillebrett og avatar

Start med å utforme det første rommet, ved å opprette et plate-objekt (Trykk ‘Space’ -tasten på tastaturet mens musepekeren er i 3d-scenen, og velg ‘Add -> Mesh -> Plane’ i menyen som åpnes).
Skift til redigeringsmodus (TAB-tasten på tastaturet), og subdivide platen 3 ganger, slik at den består av 8 x 8 faces (flater). (Subdivide: Trykk ‘W’ -tasten på tastaturet mens musepekeren er i 3d-scenen, og velg ‘Subdivide’ i ‘Specials’ -menyen).

Endre meshens valg modus til ‘Egde Select Mode’ (Ctrl Tab 2).  Opprett veggene til rommet ved å extrude ytterlinjene (alle de ytterste egdene) oppover (Trykk ‘E’ -tasten på tastaturet, og velg ‘Only Edges’ i ‘Extrude’-menyen).

Marker ytterveggene vha. 'Border Select' -verktøyet

Marker ytterveggene vha. 'Border Select' -verktøyet

Extrude vegger

Extrude vegger (E + Z tastene på tastaturet)

Skaler (S -tasten på tastaturet) den øverste kanten av veggene utover  slik at de får en mindre vinkel. (Når alle egdene [linjene] øverst på veggen er markert skaleres de utifra sentrum i meshen; altså det rosa objekt-punktet i midten). Når veggene blir satt på skrå på denne måten, vil avataren bare skli oppover veggene ved en kollisjon. Dersom  veggene blir plasserte i 90 graders vinkel på gulvet vil  avataren (kameraet)  lett gå tvers gjennom veggene.

Skaler veggene

Skaler veggene

Endre meshens valg modus til ‘Vertex Select Mode’ (Ctrl Tab 1), og lag et lite fjell i hvert hjørne ved å markere en vertex i hvert hjørne, og flytt dem oppover (G + Z tastene på tastaturet) samtidig, slik at de fire fjellene blir like store.

Lag fjell ved å flytte vertexer

Lag fjell ved å flytte vertexer

Endre meshens valg modus til ‘Face Select Mode’ (Ctrl Tab 3). Opprett hullene i gulvet ved å extrude noen av facene i gulvet nedover: Marker flatene som skal danne fordypningene i gulvet. Trykk E -tasten på tastaturet, og velg ‘Individual Faces’ i ‘Extrude’-menyen. Flytt flatene nedover ved å bevege musen, for å lage passelig dype hull (ca. 2,5 blender-enheter/ruter).

Hull i gulv vha. Extrude -funksjonen

Hull i gulv vha. Extrude -funksjonen

spillebrett

spillebrett

Så lager vi en avatar av kameraet.

For å kunne styre kameraet ‘limer’ du det oppå en kube, som kan kontrolleres med sensorer i spill motoren:  Opprett først en liten kube, som plasseres på gulvet inntill en av veggene. Kuben må være liten, slik at den representere en liten person i et stort rom.  Sammenligne kuben med hullene i gulvet, slik at kuben får rett størrelsesforhold sammenlignet med hullene i gulvet.

Kubens størrelse i forhold til hullenes størrelse

Kubens størrelse i forhold til hullenes størrelse

Flytt deretter kameraet, og plasser det i en posisjon rett over kuben. Finjuster posisjonen og vinkelen til kameraet slik at du får en fin oversikt over gulvet i «CameraView» uten at kuben blir synlig.

Spillebrettet sett i CameraView

Spillebrettet sett i CameraView

Juster kameraet mens du ser på gulvet gjennom kameraet i «CameraView»-synsvinkelen i 3d-scenen. (Les mer i «Interaktiv 3d-presentasjon med Blender» om kamerajustering).
Deretter lenkes kameraet til kuben ved å gjøre kuben til ‘parent’ (forelder) av kameraet, slik at kameraets bevegelser blir styrt av kuben:   Med kameraet markert, holder du  inne ‘shift-tasten’ mens du høyreklikker på kuben. Velg ‘Object -> Parent -> Make Parent’ (Ctrl P) i 3d-scenens menylinje (header).

Kameraet 'child' av kuben

Kameraet 'child' av kuben

En stiplet linje strekkes mellom kameraets objekt-punkt (det rosa punktet til et objekt i objektmodus) og kubens objekt-punkt, for å vise at disse objektene er lenket til hverandre.
Gi kuben myke kanter ved hjelp av ‘Bevel’-verktøyet: Marker kuben, og skift til ‘Edit Mode’ (TAB-tasten på tastaturet). Trykk ‘W’-tasten på tastaturet mens musepekeren er i 3d-scene vinduet, for å åpne «Specials»-menyen, og velg ‘Bevel’. Beveg musen for å justere hvor stor brett kantene til kuben skal få.

Bevel

Bevel

Skift til objekt-modus, og klikk på ‘Set smoot’-knappen i ‘Link and Materials’-panelet i ‘Editing’-vinduet (F10). Ved å gjøre kuben litt rund i kantene skjærer den ikke så lett gjennom veggene i spillbrettet.
En annen årsak til at vi velger å la kuben styre kameraet er at det må løftes litt opp fra gulvet for å gi en troverdig utsikt over gulvet. Dersom kameraet ikke hadde en kube å hvile på, ville det vise gulvet fra en for lav vinkel.

3d-objektenes egenskaper i spillmotoren

For at de to objektene (spillebrettet og kuben) skal oppføre seg slik vi ønsker i spillet, må de gis spesielle egenskaper i spill-motoren. Åpne ‘Logic’ -vinduet (F4). Oppe til venstre i ‘Logic’-vinduet er det en knappegruppe hvor du gir objektene slike egenskaper.

objektegenskaper

objektegenskaper

Marker spillebrettet i 3d-scenen ved å høyreklikke på det.  I standardinnstillingene i ‘Logic’ -vinduet er et objekt presentert som ‘Static’, det vil si at det er upåvirket av de fysiske kreftene som spill motoren simulerer. La spillbrettet være et statisk objekt, og gjør ingen endringer i standardinnstillingene. Spillebrettet skal ligge i ro i løpet av spillet og skal ikke påvirkes av noen krefter.
Men egenskapene til kamera-kuben må endres. For å unngå at kuben med kameraet skal bevege seg gjennom veggene i rommet må vi gjøre kuben til et fysisk objekt. Marker kuben i 3d-scenen, og gi kuben egenskapen «Dynamic» i ‘Logic’ -vinduet. Dette får kuben til å reagere med avvisning når den kolliderer med andre objekter med egenskapen «Static».

Interaktivitet: Sensors, Controllers og Actuators

Objektene i et spill kan gi beskjeder til hverandre, og den som spiller spillet kan gi beskjeder til objektene i spillet. Dette skjer ved å gi objektene ‘sensorer’, som både sender og tar i mot signaler fra andre objekter og den som spiller spillet.
Det finnes mange måter et objekt kan sende og ta i mot beskjeder på: ved å kollidere med andre objekter, ved å ta i mot beskjeder fra spilleren via datamaskinens tastatur o.l. Dette kalles for sensor typer.
En beskjed innholder en handling om hva som skal gjøres. En slik handling kalles for en ‘actuator’, og du kan velge mellom mange handlinger som skal utføres (actuator typer): bevegelse, scene-skift, endring av synlighet, lyd-hendelser o.l. For å tillegge en sensor en hendelse brukes en ‘controller’ (en kontrollør) for å linke sensoren og hendelsen.
I Blender er denne programmeringen heldigvis visualisert på en enkel måte:

I ‘Logic’-vinduet er det 3 knappegrupper: sensors, controllers og actuators .

De 3 knappe-gruppene

De 3 knappe-gruppene

I ‘Sensors’ bestemmer du hvilken innputt type som skal sette igang en hendelse (slik som f.eks. en spesiell tast på tastaturet). I ‘Actuators’ bestemmer du hvilken hendelse som skal utføres. ‘Controllers’ lenker sammen innputt typen og hendelsen. Innputt type og hendelser i ‘Logic’-vinduet vises for det aktive (markerte) objektet i 3d-scenen.  Klikk på ‘Add’-knappene til ‘Sensors’, ‘Controllers’ og ‘Actuators’ for å legge til en ny innputt type, hendelse og link mellom disse, til det markerte objektet i 3d-scenen.

Add-knappene

Add-knappene

Den nye sensoren, linken og hendelsen har flere valg for hvilken type innputt, link metode og hendelse som skal brukes, men først må innputt, link metode og hendelse forbindes med hverandre.
Dette gjøres på en enkel visuell måte. På høyre side av knappegruppen til ‘Sensors’ er det en rund gylden kule. Ved å klikke og dra en linje fra denne kulen til kulen på venstre side av ‘Controllers’-knappegruppen, forbindes innputt typen med link metoden. På samme måte forbinder du link metoden med hendelsen.

Forbindelses-linjen

Forbindelses-linjen

Forbindelses-linjen slettes ved å venstre-klikke på den, og trykke ‘Del’-tasten på tastaturet mens musepekeren holdes over linjen. Linjen får hvit farge når musepekeren ligger på linjen.

Slette forbindelses-linjen

Slette forbindelses-linjen

Gi kameraet styre-sensorer

I spillet vårt skal vi styre kameraet ved hjelp av piltastene til tastaturet. Marker kuben i 3d-scenen som er lenket til kameraet, og som styrer kameraets bevegelser. Legg til en ny sensor for kuben i ‘Logic’ -vinduet, og velg sensortype «Keyboard» ved å klikke på pilen bak listeboksen med navnet «Always». Alle sensorer åpnes med sensortypen «Always» som standardvalg.

Velg sensortype

Velg sensortype

I innstillings-valgene til keyboard-sensoren velger du hvilken tast i tastaturet som skal sende en beskjed til kuben, ved å klikke på den tomme knappen til ‘Key’ (ill 1). Når denne knappen er aktivert, gir den beskjed om at du skal trykke den tasten på tastaturet som du ønsker skal være sensor-tasten (ill. 2). Trykk på pil-tasten som peker oppover for å velge denne. ‘Key’ -knappen vil da få verdien ‘Uparrow’ (ill. 3).

Legg verdi i keyboard-sensor

Legg verdi i keyboard-sensor

Legg til en ny ‘Controller’, og bruk standardvalget «And» som Controller-type. Legg til en ny ‘Actuator’, og bruk standard-typen «Motion» som Actuator-type. Det finnes 2 motion-typer: ‘Simple motion’ og ‘Servo Control’. Bruk standardvalget ‘Simple motion’.

Motion actuator

Motion actuator

I valgene under ‘Simple motion’ bestemmer du på hvilken måte objektet skal bevege seg på. ‘Loc’ angir at bevegelsen (motion) skal utføres i en retning i 3d-rommet. ‘Loc’ -verdien har 3 parametere:  én verdi for hver retning i 3d-rommet (X, Y og Z). Vær oppmerksom på at det er i de lokale retningene til objektet ‘Loc’ -verdiene angis!

Globale og lokale akser

Globale og lokale akser

Når et objekt opprettes er alltid objektets lokale akser de samme som de globale aksene.

Ny lokal akse

Ny lokal akse

Men når du roterer objektet, får objektet sine egne lokale akser uavhengig av de globale aksene i 3d-rommet. I spill motoren er det altså objektets egne lokale akser som bevegelsene følger. Dersom du er i tvil om hva objektets lokale retnings-akser er, kan du sjekke dette ved å trykke f.eks. ‘G’ -tasten etterfulgt av ‘X’ -tasten to ganger for å finne hva som er objektets lokale X-akse. Når du trykker retnings-tasten to ganger, vil det bli streket oppe en rosa linje gjennom objektet som viser den lokale retningen.
Dersom du ønsker at bevegelsene skal utføres langs de globale aksene må du deaktivere den lille ‘L’ -knappen (local) bak tekstboksene til ‘Loc’ -verdien.

Flytting langs den lokale X-aksen (G + X + X -tastene)

Flytting langs den lokale X-aksen (G + X + X -tastene)

I spillet vårt er kuben plassert et stykke ut i positiv retning langs X-aksen uten å ha blitt rotert, slik at kuben fremdeles har samme lokale akser som de globale aksene. Kameraet som er lenket til kuben, peker i retningen mot sentrum av koordinatsystemet i 3d-cenen.

Kamera posisjon i spillet

Kamera posisjon i spillet

Derfor er ‘Loc’ -verdien i X-retningen satt til ‘-0,10′ i illustrasjonen «Motion actuator». Tall-verdiene angir hvor stor kraft (hastighet) som skal brukes for å bevege objektet. Maks kraft er ’10 000’.
Lenk sensoren, controlleren og actuatoren med hverandre ved å dra forbindelseslinjer mellom dem, og prøvekjør kamera-bevegelsen ved å trykke ‘P’ -tasten på tastaturet mens musepekeren er i 3d-scenen. Trykk ‘PilOpp’ -tasten for å bevege kuben og kameraet framover. Avslutt kjøringen av spill motoren ved å trykke ‘Esc’ -tasten på tastaturet.

Legg til en keyboard-sensor for ‘PilNed’ -tasten, og lenk den på samme måten til en ‘Motion -> Simple motion’ -actuator med en positiv ‘Loc’ (X) -verdi på ‘0,10’.

DownArrow sensor

DownArrow sensor

Legg også til sensorer for ‘PilVenstre’ -tasten og ‘PilHøyre’ -tasten. Når spilleren trykker på venstre og høyre piltaster skal kuben rotere til henholdsvis venstre og høyre. Her må vi derfor bruke ‘Simple motion’ ´s ‘Rot’ (rotasjon) verdier for å få kuben til å rotere når piltastene trykkes.

LeftArrow sensor

LeftArrow sensor

Kuben (og kameraet) skal roteres rundt Z -aksen, så verdien må settes inn i ‘Rot’ -verdiens Z -tekstboks.
Legg inn en positiv verdi (0,10) i ‘PilVenstre’ (LeftArrow) -sensoren, slik at  kuben roteres til venstre, og legg inn en negativ verdi (-0,10) i ‘PilHøyre’ (RightArrow) -sensoren for å rotere kuben mot høyre.

Kube og Kamera roteres til venstre ved trykk på 'PilVenstre' -tasten

Kube og Kamera roteres til venstre ved trykk på 'PilVenstre' -tasten

Dersom du nå testkjører spillet, så kan du styre kuben (og kameraet) hvor du vil på spillbrettet:
Skift til ‘CameraView’ (0 -tasten på det numeriske tastaturet), marker «kamera-kuben» i 3d-scenen, og trykk ‘P’ -tasten på tastaturet mens musepekeren er i 3d-scenen.

Lyssetting

Fra nå av vil spillbrettet fylles opp av flere objekter, og vi skal derfor gjøre et par forberedelser før vi går videre, slik at det blir enklere å teste spillet underveis.
Først må vi sørge for riktig belysning: Fjern standardlyset i scenen, og opprett 5 nye lamper av typen ‘Spot’ (Trykk ‘Space’-tasten på tastaturet med musepekeren i 3d-scenen, og velg ‘Add -> Lamp -> Spot’ i menyen som åpnes).

Belysning av spillbrettet

Belysning av spillbrettet

Plasser lysene ca. 2,5 blender-enheter (ruter i koordinatsystemet) over spillbrettet. Plasser 4 av lysene oppå «fjellene» i hjørnene, og la det femte lyset peke rett ned på midten av spillbrettet.

Spot-lysene i FrontView

Spot-lysene i FrontView

Marker et av lysene, og trykk ‘F5’ -tasten på tastaturet for å åpne ‘Shading’ -vinduet. Klikk på ‘Lamp buttons’ -knappen i menylinja. Sett distanse-verdien (Dist:) til 30 i ‘Lamp’ -panelet. Velg ‘Ray Shadow’ i ‘Shadow and Spot’ -panelet, og sett spot-størrelsen (SpotSi) til 94 grader.

innstillinger spot

innstillinger spot

Gi de andre spot-lysene samme innstillinger. Vi har nå belyst scenen, slik at du kan se spillebrettet på riktig måte når du tester spillet.

Et annet nyttig hjelpemiddel er ‘Outliner’ -vinduet, som du kan bruke til å markere objekter i 3d-scenen med. Her kan du også skjule objekter som er i veien i 3d-scenen ved å klikke på øye-symbolet til objektet. ‘Outliner’ -vinduet er også fint til å få oversikt over hvilke objekter som befinner seg i de ulike scenene, når du etterhvert får flere scener i spillet. Del 3d-scene vinduet i to, og la et av vinduene være tilegnet ‘Outliner’ -vinduet, slik at du til enhver tid har oversikt og kontroll over objektene og scenene i spillet.

Outliner vinduet

Outliner vinduet

Med ‘Outliner’ -vinduet åpent kan du raskt skjule og markere objekter i 3d-scenen, og du har hele tiden oversikt over hvilke objekter og scener som finnes i spillet.

Automatisk restart av spillet – lag en «Gameout» funksjon

Nå som du kan styre kameraet, og har lenket det til en kube som kan ta i mot og sende beskjeder til andre objekter i spillet, kan vi legge inn hendelser i spillet.
Spillet skal restartes når «kamera-boksen» treffer taket og bunnen i hullene: Dersom «kamera-boksen» treffer veggene med stor fart, vil den bli presset oppover de skrå veggene, og til slutt falle ut over kanten til veggene. For å hindre at «kamera-boksen» faller ut av spillbrettet og på denne måten lager en uønsket avslutning av spillet hvor det ikke er mulig å vende tilbake til start, må vi opprette et eget tak-objekt, som kan gi beskjed til spillet at det skal restartes. Taket vil også hindre at «kamera-boksen» faller ut av spillbrettet. Opprett en stor kube som du legger oppå spillbrettet som et tak. Utform kuben slik at den dekker hele spillbrettet, og skaler ned tykkelsen slik at den får form som en tynn plate.

Tak Objekt

Tak Objekt

Legg platen helt ned på veggene:

Tak på plass

Tak på plass

For at tak-objektet skal kunne gi spillet beskjed om å restarte når det treffes av «kamera-boksen», må du gi tak-objektet en sensor som registrerer at det treffes av «kamera-boksen». Og for at tak-objektet skal vite at det er «kamera-boksen» det blir truffet av, må du gi «kamera-boksen» et navn. Marker kuben som er lenket til kameraet, og trykk ‘F9’ -tasten på tastaturet for å åpne redigerings-vinduet. I ‘Link and Materials’ -panelet endrer du kubens objekt-navn (tekstboksen ‘OB:’) og datablock-navnet (tekstboksen ‘ME:’) til «player».

player navn

player navn

Med kuben fremdeles markert i 3d-scenen skifter du tilbake til ‘Logic’ -vinduet (F4), og klikker på ‘Add Property’ -knappen (Legg til egenskap). Gi propertyen navnet «player».

Add Property "player"

Add Property "player"

Du har nå gitt «kamera-kuben» en egenskap som heter «player», og alle objekter i spillet har heretter mulighet til å ta kontakt med «kamera-kuben» fordi den har fått et eget navn. La oss fortelle tak-objektet hva det skal gjøre når det treffes av «kamera-kuben»:
Velg tak-objektet i 3d-scenen. Legg til en sensor, controller og actuator. Velg ‘Collision’ som sensor-type, og velg ‘Game’ som actuator-type. ‘Game’ -actuatoren har en hel liste med hendelser som kan utføres: velg hendelsen ‘Restart this game’. For at ‘Collision’ -sensoren skal vite hvilket objekt taket må kollidere med for at hendelsen skal utføres, må du fortelle sensoren dette ved å skrive navnet «player» i ‘Property’ -boksen.

tak sensor

tak sensor

Nå vet tak-objektet at dersom det kommer i berøring med et objekt som har egenskapen «player», så skal tak-objektet gi beskjed til spill motoren om at spillet skal restartes. Når du spiller spillet vil dette virke som om du blir sendt tilbake til start, der hvor kameraet var plassert når du startet spillet.
(Med knappen ‘M/P’ foran ‘Property’ -boksen kan du bestemme om sensoren skal lytte etter objekter med en spesiell egenskap (Property) eller et spesiellt materiale. For du kan også be en sensor om å reagere på et spesiellt navngitt materiale, ved å aktivere ‘M/P’ -knappen).
Bruk «kamera-kubens» ‘player’ -egenskap til å restarte spillet når spilleren (kameraet) faller ned i hullene i gulvet til spillebrettet:
Opprett plater; skaler dem slik at de får samme form som hvert enkelt hull, og senk dem ned i hullene slik at de danner gulv.

gulvplater

gulvplater

Pass på at disse gulvplatene ligger oppå de gamle gulvene i hullene (altså spillebrett objektet).

Gulvplatene må ligge oppå spillebrett -meshen

Gulvplatene må ligge oppå spillebrett -meshen

Legg til en sensor, controller og actuator i hver av gulvplatene, på samme måte som du gjorde med tak-objektet. Dersom du nå prøvekjører spillet (velg «kamera-kuben» i 3d-scenen, skift til ‘CameraView’ , og trykk ‘P’ -tasten på tastaturet mens musepekeren er i 3d-scenen) vil du oppleve at spillet restartes når du kameraet faller ned i hullene.

Animerte roboter – forenklede bots

Ok, vi har nå mulighet til å bevege oss rundt på spillbrettet via et kamera, og i gulvet er det huller som spilleren må unngå for ikke å måtte starte på nytt.
For å øke vanskelighets-graden og spenningen (!) skal vi også sette inn 2 enkle roboter som skal bevege seg av seg selv rundt i spillbrettet. I spill-terminologien kalles slike automatiserte ‘fiender’ med kunstig intelligens (AI) for ‘bots’. De to robotene som skal brukes i spillet her kan vel egentlig ikke kalles for bots, fordi de ikke er programmert (med python) til å reagere på noen spesiell måte når de møter spilleren (kameraet), men momentet (med bevegelige objekter utenfor spillerens kontroll) de tilfører spillet fører til økt spenning, og gir en liten pekepinne på hvordan en kan bruke ordnlige bots som en del av plottet i et spill. De to enkle robotene våre skal kun bevege seg rundt i spillbrettet langs de samme rutene, og dytte bort alt som kommer i veien. Faren for å falle ned i hullene i gulvet øker betraktelig på grunn av dette.

Opprett en kube, og gi den en størrelse som står i forhold til hullene i gulvet. Kuben må altså være mindre enn hullene slik at den får en naturlig størrelse i forhold til omgivelsene. Modeler også noen enkle former på kuben, og gi den et enkelt materiale. Dette skal være den ene roboten.

robot nr. 1

robot nr. 1

Gi roboten en løpebane i spillbrettet, ved å animere bevegelsen på vanlig måte: flytt kuben og sett inn Loc-Key Frames. Gi animasjonen en timeline på ca. 100 frames (trykk ‘F10’ -tasten på tastaturet for å åpne ‘Scene’ -vinduet, og klikk ‘Render buttons’ -knappen i menylinja. Juster lengden på tidslinja ved å sette inn verdien ‘100’ i ‘End’ -tekstboksen i ‘Anim’ -panelet).

Bestem lengde på animasjon

Bestem lengde på animasjon

Dette vil gi roboten passelig fart i forhold til avstanden den skal bevege seg på. Lengden på løpebanen avhenger selvfølgelig av hvor stort spillebrettet er, noe som igjen vil bestemme hvor mange frames tidslinja skal være på, og hvor stor fart roboten skal ha. Spillebrettet i spillet her er ca. 5 x 5 blender-enheter, og etter litt prøving og feiling kom jeg fram til at en animasjon på ca. 100 frames ga en passelig fart i forhold til avstanden som roboten skulle avlegge i et spillebrett på denne størrelsen.  Animasjonen til roboten kjører helt uavhengig av resten av hendelsene i spillet, så du kan la en animasjon ha en tidslinje på så mange frames som du selv ønsker.

Robotens løpebane

Robotens løpebane i spillebrettet

Animasjonen er nå lagret i ipo-kurver. Marker roboten i 3d-scenen, og åpne ‘Logic’ -vinduet (F4). La roboten være av typen ‘Static’, og legg til en ny sensor, controller og actuator. Velg sensor-type ‘Always’, og actuator-type ‘Ipo’ med verdien ‘Play’. Dette vil få animasjonen til å kjøre på vanlig måte i spillet.

Robotens sensor, controller og actuator

Robotens sensor, controller og actuator

I ‘Sta’ (start frame) og ‘End’ (slutt frame) tekstboksene legger du inn samme verdiene som ble brukt i ‘Anim’ -panelet i ‘Scene’ -vinduet når du opprettet animasjonen, slik at alle framene i animasjonen blir vist fra start til slutt når spillet kjøres. Dersom du setter en mindre ‘End’ -verdi enn orginal-animasjonen har, vil animasjonen bli kuttet av. Animasjonen looper av seg selv.

Legg til den andre roboten i spillet på samme måte. Gi den en annen løpebane, som gjør det vanskelig for spilleren å bevege seg i spillebrettet. Husk på at begge robotene må være av typen ‘Static’, slik at de kan dytte bort «kamera-kuben» (som er av typen ‘Dynamic’) uten å selv bli påvirket av sammenstøtet.

Legg til flere scener

Når en bruker åpner spillet for første gang er det ikke åpenbart hva spillet går ut på og hvordan man bruker det. Derfor er det alltid lurt å la brukeren få informasjon om dette i en egen scene før selve spillet begynner. Vi skal derfor legge til en info-scene, som skal inneholde informasjon om spillet, og som skal være åpningsscenen i spillet.

Klikk på dobbelpila oppe i ‘SCE:’ tekstboksen i menylinja øverst i Blender-vinduet, og velg ADD NEW. Velg deretter å kopiere scenen i sin helhet (Full copy).

Når du oppretter en ny scene på grunnlag av den første scenen sparer du mye arbeid: du beholder kameraet, spillbrettet og alle innstillinger fra første scene, og slipper å sette dette opp på nytt. Det er mye lettere å endre på det du har gjort tidligere enn å bygge opp innholdet i scenen fra grunnen av. Selv når du kanskje skal ha helt nye omgivelser i den nye scenen din, er det lettere å bruke scenen du har fra før av, fordi du da f.eks. slipper å sette opp et nytt kamera med interaktivitet, du behøver ikke opprette nye lys, for du trenger bare endre på de du har osv. Jo mer tid du sparer på å ikke gjøre det samme arbeidet gjentatte ganger, jo mer moro får du!
Vær oppmerksom på at den nye kopierte scenen blir lagt sist i listen over scener. Når du skal eksportere spillet som en kjørbar fil, er det den aktive scenen i Blender (den som vises i 3d-scenen) som blir den første scenen i spillet i den kjørbare filen.

legg til Scene

legg til Scene

Den nye scenen (som skal vises først i spillet), skal vise en info-tekst på en farget bakgrunn. Ved å klikke med musen på bakgrunnen skal scene2 (rommet med spillebrettet du allerede har laget) i spillet åpnes.

Vi behøver ikke «kamera-kubens» kontroller i denne første scenen, så vi fjerner sensoren, controlleren og actuatoren til ‘player’ -objektet («kamera-kuben») i denne scenen. Åpningsscenen skal kun være et vindu med info-tekst som spilleren skal klikke i for å fortsette. Her behøves ingen interaktivitet. Slett derfor også begge robotene, og alle bunn-platene som ligger i bunnen av hullene i gulvet til spillebrettet. Fordi disse meshene ikke er synlige i åpningsscenen er det unødvendig å beholde dem. Dette vil også minke filstørrelsen i den kjørbare filen.

Opprett en kube, og skaler den slik at den får form som en stor tynn plate. Dette skal bli den fargede bakgrunnen. Roter og flytt platen i en posisjon der den fungerer som en vegg som dekker hele kameraets synsfelt. Gi den et enkelt materiale med farge.

bakteppe åpningsscene

bakteppe åpningsscene

Legg merke til at platen har omtrent samme skråvinkel som kameraet, for å unngå uheldige lysrefleksjoner og forvrengninger.

Legg til tekst-objekt

Så oppretter du et tekst-objekt som skal innholde info-teksten: Endre synsvinkel til ‘TopView’ (sett ovenfra) fordi tekst-objektet alltid opprettes liggende. Trykk ‘Space’ -tasten på tastaturet mens musepekeren er i 3d-scenen, og velg ‘Add -> Text’ i menyen som åpnes. Tekst-objektet opprettes (i siktekorset) i objekt-modus. Trykk ‘TAB’ -tasten for å endre modus til redigerings-modus. Et grått skrivemerke åpnes bak teksten for å indikere at du nå kan redigere teksten.

tekst-objektet

tekst-objektet

Trykk ‘spaceback’ -tasten (tilbake-tasten) noen ganger for å slette standard-teksten ‘Text’, og skriv intro-teksten din. Skift til en ny linje ved å trykke ‘Enter’ -tasten. Blender har mange tekst-innstillinger. I ‘Font’ -panelet i ‘Redigering’ -vinduet (F9) kan du bl.a. bestemme om teksten skal være midtstilt (Center-knappen), venstre (Left-knappen) -eller høyrejustert (Right-knappen), du kan endre størrelsen på teksten (Size -tekstboksen), og avstanden mellom linjene (Linedist -tekstboksen), bokstavene (Spacing -tekstboksen), og ordene (Word spacing -tekstboksen) og mye mer.

'Font' -panelet

'Font' -panelet

Avslutt redigeringen ved å trykke ‘TAB’ -tasten igjen.
I ‘Curve and Surface’ -panelet kan du også tilføre bokstavene dybde og bevel mens tekst-objektet er i objekt-modus.

'Curve and Surface' -panelet

'Curve and Surface' -panelet

I ‘Extrude’ -tekstboksen justere du dybden (tykkelsen) til bokstavene. Verdien til ‘Bevel Depth’ bestemmer i hvor stor grad kantene til den tykke bokstaven skal avrundes, og i tekstboksen til ‘BevResol’ justerer du hvor myk avrundingen skal være.

Bokstav dybde

Bokstav dybde

Du kan lage mye fint med tekst-verktøyene til Blender, men for øyeblikket skal vi bare bruke et helt enkelt tekst-objekt uten dybde til intro-teksten. Når du har skrevet en passelig intro, må du konvertere tekst-objektet til en mesh, for å gjøre teksten synlig når spillet kjøres: Med tekst-objektet (i objekt-modus) markert i 3d-scenen velger du ‘Object -> Convert Object Type …’ (Alt + C) i 3d-vinduets menylinje. I ‘Convert Font to’ -menyen som åpnes, velger du ‘Mesh’.
Roter og plasser tekst-meshen mellom kameraet og bakgrunns-platen. Juster vinkelen på teksten, slik at den får samme skråe vinkel som bakgrunns-platen, og gi tekst-meshen et enkelt materiale med farge.  Opprett gjerne et tekstobjekt til, dersom det behøves.

tekst mellom bakgrunn og kamera

tekst mellom bakgrunn og kamera

Tekst i 'CameraView' (0 på det numeriske tastaturet)

Tekst i 'CameraView' (0 på det numeriske tastaturet)

Prøv deg frem, og finn en plassering/vinkel som får teksten best mulig frem fra bakgrunnen, sett i fra kameraets synsvinkel, når du testkjører spillet .

Lys er et like viktig hjelpemiddel for modellering som flytting av vertexer. Plasser derfor et ekstra lys av typen ‘Lamp’ bak kameraet, for å få teksten til å vises bedre, og for å få frem gløden i fargen til bakgrunnen. Åpne ‘Shading’ -vinduet (F5), og klikk på «Lamp buttons’ -knappen. I ‘Lamp’ -panelet setter du verdien for ‘Energy’ til ‘0,5’, slik at lyset ikke blir så sterkt at det ødelegger fargene i bakgrunnen og teksten istedet for å få dem frem!

Ekstra tekst-belysning

Ekstra tekst-belysning

Ekstra lys for tekst, sett fra siden

Ekstra lys for tekst, sett fra siden

Prøv deg frem. Juster høyden på lyset, og avstanden til teksten/bakgrunnen, og forsøk å la lyset arbeide frem en best mulig fremstilling av teksten/bakgrunnen sett i fra kamera-synsvinkelen.

Bakgrunnen med tekst, sett i CameraView når spillet kjører

Bakgrunnen med tekst, sett i CameraView når spillet kjører

Når spilleren klikker på den røde bakgrunnen skal scenen med spillebrettet åpnes. I neste artikkel (Lag et spill med Blender – del 2) skal vi gi bakgrunnen en sensor som registrerer om musepekeren er over bakgrunnen når venstre musetast klikkes. Følg med! 🙂

Advertisements
%d bloggers like this: