Lag et spill med Blender – del 2

(Del 1)

Gjør musepekeren synlig, og legg inn klikk-sensor

I utgangspunktet skjules musepekeren når spill motoren kjører. For at det skal være mulig å klikke på bakgrunnen i åpningsscenen må du først gjøre musepekeren synlig. Dette gjøres ved hjelp av et python-script.
Åpne ‘Text Editor’ -vinduet, og opprett en ny tekstfil ved å klikke på knappen «Browses existing choices or adds NEW» (den lille knappen med dobbelpil). Velg «Text» i menyen som åpnes.

Opprett ny tekstfil i 'Text Editor' -vinduet

Opprett ny tekstfil i 'Text Editor' -vinduet

Skriv inn følgende script:

import Rasterizer
Rasterizer.showMouse(1)

Gi scriptet navnet «scriptmus.py» i ‘TX:’ -tekstboksen nede i ‘Text Editor’ -vinduet.

Gi scriptet navn

Gi scriptet navn

På denne måten blir scriptet lagret som et internt python-script i blender-fila.
Markér kameraet i 3d-scenen.
Deretter lenker du python-scriptet til åpningsscenen ved å gi kameraet i åpningsscenen en ny sensor og en ny controller i ‘Logic’ -vinduet. Velg ‘Always’ som sensor-type, og velg ‘Python’ som controller-type. Python-controlleren har en parameter-verdi som heter ‘Script’. Her skriver du inn navnet på python-scriptet ditt: «scriptmus.py».

Kameraets script-sensor

Kameraets script-sensor

(Legg merke til at kameraet i åpningsscenen har fått navnet ‘Camera.001’, fordi dette kameraet er en selvstendig kopi av kameraet i scenen med spillebrettet som vi kopierte).
Så lenge dette kameraet er aktivt i spillet vil musepekeren være synlig, fordi vi nå har gitt spill motoren beskjed om å alltid vise musepekeren (ved hjelp av ‘scriptmus’ -scriptet) så lenge ‘Camera.001’ i bruk.

Nå kan vi gi bakgrunnen en sensor som fanger opp museklikk når musepekeren ligger over bakgrunn-objektet (en kube):
Marker bakgrunn-objektet i 3d-scenen. Åpne ‘Logic’-vinduet (F4), og gi bakgrunn-objektet en sensor av typen ‘Mouse’, med verdien ‘Left button’. Legg til en ny controller, og lenk den til en ny actuator av typen ‘Scene’. Velg ‘Set Scene’ i listen over ‘Scene’-verdier, og skriv inn ‘Scene2’ i ‘SCE:’ -tekstboksen under, for å fortelle at denne scenen skal velges.

Bakgrunn-objektets museklikk-sensor

Bakgrunn-objektets museklikk-sensor

Nå er det på tide å gi de to scenene vi har, riktig navn i forhold til hvilken rekkefølge de skal ha i spillet: Velg den første scenen (scenen med spillebrettet) ved å klikke på knappen foran ‘SCE:’ -tekstboksen oppe i den øverste menylinja i Blender, og velg ‘Scene’ i listen som åpnes.

Velg scener

Velg scener

Gi scenen nytt navn ved å klikke inni ‘SCE:’ tekstboksen og skriv «Scene2», fordi denne scenen kommer etter åpningsscenen i spillet. Gi også åpningsscenen nytt navn på samme måten, ved å åpne listen igjen, og velg ‘Scene.001’. Klikk inni ‘SCE:’ -tekstboksen og skriv «Scene1».
Nå har vi gitt scenene logiske navn i forhold til rekkefølgen de har i spillet.
Vær oppmerksom på at det er den aktive scenen i ‘3d-scene’ -vinduet som blir den første scenen i spillet, når du eksporterer spillet (File -> Save Game as Runtime …) som en kjørbar fil (Windows: exe-fil). Blender pakker ikke scenene automatisk i riktig rekkefølge på grunnlag av scene-navnene. Å ha rett navn på scenene er kun et hjelpemiddel for deg når du lager spillet.
Når du nå testkjører spillet (velg Scene1 med ‘CameraView’, og trykk ‘P’ -tasten på tastaturet) vil musepekeren være synlig, og når du klikker på bakgrunnen til info-teksten vil Scene2 med spillebrettet åpnes.

Legg inn lyder

Lyder i et spill er et viktig virkemiddel for å skape stemning og realisme, så vi legger til dette også.
Litt bakgrunnsmusikk mens brukeren leser info-teksten i åpningsscenen er bra, så vi legger til en liten wav-fil som skal loope, i denne scenen:
Åpne ‘Scene’ -vinduet (F10), og klikk på ‘Sound Block Buttons’ -knappen i menylinja for å åpne lyd-panelene.
I ‘Sound’ -panelet er det en liten knapp som heter ‘Blender Sound block’. Klikk på denne knappen, og velg ‘OPEN NEW’ for å opprette et nytt lyd-objekt i blender-fila. Dette åpner ‘Select Wav File’ -vinduet (en variant av ‘File Browser’ -vinduet), hvor du velger en wav-fil fra harddisken.

'Blender Sound block' - legg til ny lyd-ressurs i blender-fila

'Blender Sound block' - legg til ny lyd-ressurs i blender-fila

Når du har åpnet wav-fila vil ‘Sound’ -panelet vise navnet på lyd-objektet i ‘SO:’ -tekstboksen, hvilken wav-fil på harddisken som lyd-objektet inneholder, og kvaliteten til wav-fila:

Egenskaper til lyd-objektet

Egenskaper til lyd-objektet

Når du oppretter et nytt lyd-objekt på denne måten, vil lyd-objektet få samme navn som navnet på wav-fila, men du kan gi lyd-objektet et eget navn om du ønsker. Du kan også bytte ut wav-fila i lyd-objektet med en annen wav-fil, ved å klikke på ‘Load sample’ -knappen (eller åpne listen med wav-filer dersom du har flere lyd-objekter fra før av).
Som du forstår så er et lyd-objekt en beholder med lyd-egenskap, og du kan fylle denne beholderen med en hvilken som helst wav-fil.

Nå skal vi lenke lyd-objektet til åpningsscenen:
Velg ‘Scene1’ i listen over scener. Markér bakgrunn-objektet i 3d-scenen. Åpne ‘Logic’ -vinduet (F4), og legg til en ny sensor av typen ‘Always’, og en ny controller av typen ‘AND’. Legg til en ny actuator av typen ‘Sound’. Velg ‘Loop Ping Pong’ som parameter.

Sensor for loopende lyd lagt til bakgrunn-objektet

Sensor for loopende lyd lagt til bakgrunn-objektet

Dette vil loope lyden i åpningsscenen mens spillet kjører. Når bakgrunn-objektet klikkes (og spilleren sendes til ‘Scene2’) avsluttes loop-lyden fordi den bare er lagt til bakgrunn-objektet i åpningsscenen.
Bakgrunn-objektet har nå to sensorer: én for å motta museklikk, og én for å spille av en loopende lyd (se ill. over).

Bruk samme fremgangsmåte for å legge til en loopende lyd i ‘Scene2’, og legg til sensoren (med tilhørende controller og actuator!) i selve spillebrettet.

Sensor for loopende lyd i 'Scene2' - lagt til spillebrettet

Sensor for loopende lyd i 'Scene2' - lagt til spillebrettet

I ‘Scene2’ er det også flere hendelser som det kan legges lyd til for å gjøre spillet mer engasjerende.
Legg en lyd-sensor til alle platene som ligger i bunnen av hullene i gulvet, slik at det spilles av en lyd når kameraet faller ned i et hull:

Legg først til et nytt lyd-objekt i ‘Scene’ -vinduet (F10) på samme måte som du har gjort før. Marker én av bunn-platene i et av hullene i gulvet, og legg til en ny sensor av typen ‘Near’ i ‘Logic’ -vinduet (F4).

‘Near’-sensoren fungerer slik at den reagerer på nærhet; ikke berøring. ‘Near’ -sensoren må først få vite hvilket objekt den skal reagere på. Dette forteller du ‘Near’ -sensoren ved å skrive navnet på objektet i ‘Property:’ -tekstboksen til ‘Near’ -sensoren. I spillet vårt er det objektet med navnet «player» (altså kamera-boksen) som ‘Near’ -sensoren skal reagere på. Når ‘player’ -objektet befinner seg i en viss avstand fra objektet med ‘Near’ -sensoren (altså bunn-platen) sender ‘Near’ -sensoren meldingen sin til actuatoren som utfører handlingen med å spille av lyden.
Hvor lang avstanden skal være når sensoren reagerer, bestemmer du ved å justere verdien i ‘Dist’ -tekstboksen til ‘Near’ -sensoren.

Bunn-platenes 'Near' -sensor

Bunn-platenes 'Near' -sensor

I ‘Reset’ -tekstboksen bestemmer du på hvor lang avstand trigger-objektet («player») må befinne seg, før ‘Near’ -sensoren resettes og kan begynne å reagere igjen.
I spillet vårt har denne funksjonen ingen betydning, fordi spillet restartes av en annen sensor (Collision) når «player» kolliderer med bunn-platen. Men dersom ‘Near’ -sensoren brukes på f.eks. en dør i et spill, er ‘Reset’ -funksjonen svært nyttig: Når spilleren passerer døra i en viss avstand, spilles en lyd. Med en høyere ‘Reset’ -verdi enn ‘Dist’ -verdi vil lyden ikke bli gjentatt før spilleren har beveget seg langt nok unna på spillebrettet. På denne måten kan du kontrollere hvor ofte lyden fra døra skal høres.

Men hvorfor kan vi ikke spille av en lyd ved å bruke sensor-typen ‘Collision’ i bunn-platen?
Fordi ‘Collision’ -sensoren bare sender beskjeden sin så lenge sensor-objektet er i berøring med objektet det skal reagere på. Bunn-platen har allerede en ‘Collision’ -sensor som sender beskjed til spillet at det skal restartes, og spillet restartes i samme øyeblikk som «kamera-kuben» berører bunn-platen, lenge før lyden rekker å spilles av!
Derfor må lyden få beskjed om å spilles av en ‘Near’ -sensor, en stund før «kamera-kuben» treffer bunn-platen. Egentlig spilles lyden mens «kamera-kuben» er i fritt fall nedover i hullet.

Bunn-platenes sensorer (Collision og Near)

Bunn-platenes sensorer (Collision og Near)

Vær oppmerksom på at du må legge flere små bunn-plater i gulv-hull som er store, fordi ‘Near’ -sensoren bruker objektets ‘ObjektPunkt’ når reaksjons-avstanden beregnes (‘ObjektPunktet’ er det rosa punktet som kommer til syne i objektet når det vises i objekt-modus).
Dersom du bruker bare én stor plate i bunnen av et stort hull, så vil avstanden bli for lang for sensoren dersom ‘player’ -objektet faller ned i enden av hullet langt unna ObjektPunktet:

'Near' -sensoren bruker ObjektPunktet til å beregne avstanden

'Near' -sensoren bruker ObjektPunktet til å beregne avstanden

Vær også oppmerksom på at «player» -objektet må være et objekt med ‘Dynamic’ -egenskap registrert som ‘Actor’, for at  ‘Near’ -sensoren skal reagere.

Vi skal også legge til en lyd-sensor i robotene, slik at det spilles en lyd hver gang kameraet treffes av en robot. ‘Near’ -sensoren er perfekt å bruke til dette: Hver gang kameraet treffes av en robot, setter ‘Near’ -sensoren igang med å spille en lyd like før sammenstøtet inntreffer.
Dersom vi hadde brukt ‘Collision’ -sensoren ville lyden bare blitt hørt i det ene millisekundet roboten var i direkte kontakt med «kamera-kuben» (altså ‘player’ -objektet), og i virkeligheten ville vi da bare ha hørt et ørlite fragment av lyden.

Robotenes sensorer (Always og Near)

Robotenes sensorer (Always og Near)

Både bunn-platenes -og robotenes ‘Near’ -sensorer skal forbindes med ‘Sound’ -actuatorer av typen ‘Play Stop’ (se ill. over). Det passer best med hendelsene (hurtige kollisjoner) at lyden (som bør være kort!) bare spilles av én gang.

Send spilleren til neste rom

I rommet skal vi også legge inn en kule, som spilleren (kameraet) må berøre for å komme til neste rom.
Opprett et UVsphere-objekt, mens objektene i 3d-scenen er i objekt-modus (Trykk ‘Space’ -tasten på tastaturet mens musepekeren er i 3d-scenen, og velg ‘Add -> Mesh -> UVSphere’ i menyen som åpnes).
I ‘Add UV sphere’ -menyen justerer du ned verdiene for ‘segments’ og ‘rings’ til ’24’. Det er overflødig å la kulen ha 32 segmenter og ringer; og jo færre polygoner spillet har i sin helhet desto lettere vil det håndteres av datamaskiner med liten prosessor og lite minne.
Klikk på ‘Set smooth’ i ‘Link and Materials’ -panelet i ‘Editing’ -vinduet (F9), og gi kulen et enkelt materiale.

Plasser kulen et sted i spillebrettet som det er vanskelig å komme til for spilleren. Når kamera-kuben berører kulen vil neste scene med et nytt rom åpnes.

Plasser kulen på et vanskelig tilgjengelig sted i spillebrettet

Plasser kulen på et vanskelig tilgjengelig sted i spillebrettet

Med kulen markert i 3d-scenen åpner du ‘Logic’ -vinduet (F4), og legger til en ny ‘Collision’ -sensor med ‘Property’ -verdien «player», slik at kulen vet at når den blir berørt av et objekt som heter ‘player’ skal handlingen til actuatoren starte.
Legg også til en ny controller av typen ‘AND’, og en ny actuator av typen ‘Scene’. I verdi-listen under ‘Scene’ velger du ‘Set Scene’. ‘Set Scene’ gir beskjed til spillet at en ny scene skal lastes inn. Hvilken scene som skal vises skriver du i ‘SCE:’ -tekstboksen. Skriv ‘Scene3’, fordi vi snart skal opprette en ny scene som heter ‘Scene3’.

Kulens sensor, controller og actuator

Kulens sensor, controller og actuator

Det neste rommet

Så oppretter vi en ny scene med det andre rommet: Gjør som tidligere, og kopier ‘Scene2’ med rommet/spillebrettet vi allerede har laget ferdig (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]). Gi scenen navnet ‘Scene3’.

legg til Scene

legg til Scene

Gjør noen endringer på spillebrettet slik at det blir et nytt rom:
Slett bunnplatene i gulv-hullene, og tett igjen hullene ved å flytte bunnen i hullene opp på plass igjen. Lag nye hull i gulvet andre steder enn der de var i det første spillebrettet, og legg til nye bunnplater i hullene. Gi fjellene i hjørnene nye former ved å modelere på meshen til spillebrettet, og gi brettet et nytt enkelt materiale. Gi robotene nye løpebaner ved å slette ipo-kurvene og animer nye bevegelser. Du kan gjerne også lage nye robor-objekter, for å understreke at spilleren nå befinner seg i et nytt (og vanskeligere!) rom. Flytt kulen til en annen vanskelig tilgjengelig plass i spillebrettet.
Det er lett og raskt å modifisere et spillebrett du har fra før av fordi mye av arbeidet allerede er gjort: Objektene har allerede egenskaper (Kamera-kuben er av typen ‘Dynamic’, og spillebrettet er av typen ‘Static’), kameraet er satt opp og klart til bruk, objektene er tillagt hendelser (kamera har f.eks. ‘Collision’ -sensor og egenskapen (property) ‘player’), og du kan gjenbruke alle dataene du la til i den forrige scenen (lyd, robot-hendelser, lys etc.).

Scene 3

Scene 3

Objekt med tekstur

I eksemplet her er det satt inn en ny robot med et materiale laget ved hjelp av UV-mapping. Ved å legge et spesialtilpasset bilde på et 3d-objekt kan du formgi objektet på en svært realistisk måte uten modellering. På denne måten kan du få en helt enkel mesh til å se svært detaljert ut, og spare mange polygoner.

Enkel robot-mesh med materiale laget ved hjelp av UV Mapping

Enkel robot-mesh med materiale laget ved hjelp av UV Mapping

Eksporter et 2d-bilde av objekt-overflaten ved hjelp av ‘UV-Unwrap’ -funksjonen, og tegn teksturen i Gimp.

Robot-tekstur som 2d-bilde

Robot-tekstur som 2d-bilde

Les mer her om hvordan du lager tekstur til et objekt ved hjelp av ‘UV-Unwrap’ -funksjonen. Dette er en spennende måte å lage teksturer på, hvor du kan oppnå slående resultater. Arbeidsprosessen består ofte av å veksle mellom å tegne teksturen i Gimp, og å tilpasse bildet i ‘UV/Image Editor’-vinduet i Blender.

Avslutning av spillet

I ‘Scene3’ legger du også inn en kule, som spilleren skal finne. Når kamera-kuben berører kulen skal slutt-scenen åpnes. Slutt-scenen skal vise en info-tekst om at spilleren har kommet i mål. Kulen i ‘Scene3’ gjemmes innerst i en lang tunnel. Tunnelen oppretter du i en av veggene i spillebrettet, ved å extrude en av facene i veggen:

Scene 3 med lang tunnel som skjuler kulen

Scene 3 med lang tunnel som skjuler kulen

Slutt-scene

Slutt-scene

Slutt-scenen bygges opp på samme måte som åpningsscenen, og du oppretter slutt-scenen ved å kopiere åpningsscenen og endre på teksten i den: Slett de eksisterende tekst-meshene og opprett et nytt tekst-objekt. Gi også slutt-scenen en annen loopende bakgrunnsmusikk.

Legg inn tåke

Det er også mulig å legge inn tåke i spillebrettet for å øke spenningen og vanskelighets-nivået.

Tåke

Tåke

Du legger til tåke i scenen slik:
Åpne scenen som du ønsker å ha tåke i (Scene3). Åpne ‘Shaders’ -vinduet (F5), og klikk på ‘World buttons’ -knappen i menylinja. Klikk på ‘Mist’ (tåke) -knappen i ‘Mist/Stars/Physics’ -panelet.

Innstillinger for tåke-effekt

Innstillinger for tåke-effekt

Det vil nå bli generert tåke-effekt i den aktive scenen. Juster avstanden fra kameraet til punktet hvor tåken begynner, i ‘Start’ -tekstboksen. I spillet vårt her, setter du verdien til ‘1’.
Juster avstanden fra tåkens begynnelse (dette punktet bestemte du i ‘Start’ -tekstboksen) til punktet hvor tåken tykner, i ‘Dist’ -tekstboksen. Sett verdien til ’10’.
Du kan få se en visualisering av disse ‘Mist’-verdiene i 3d-scenen, mens du justerer dem:
Marker kameraet i 3d-scenen. Åpne ‘Editing’ -vinduet (F9), og klikk på ‘Mist’ -knappen i ‘Camera’ -panelet.

Visualisering av 'Mist' -verdiene

Visualisering av 'Mist' -verdiene

Når du klikker på ‘Mist’ -knappen vil en rosa linje strekke seg fra kameraet og ut i rommet. ‘Start’ -verdien til ‘Mist’ er det gule punktet i starten av linja, og ‘Dist’ -verdien er det gule punktet i enden av linjen.
Nå kan du åpne ‘Shaders’ -vinduet (F5) igjen, og justere ‘Start’ -og ‘Dist’ verdiene samtidig som du får se endringene i 3d-scenen.
Gi også tåken en passelig kulør ved å klikke i den øverste venstre fargevelger-boksen i ‘World’ -panelet, og velg en farge. Tåken i spillet her har en gråblå farge.

Åpnings-scene med spill-meny

For å øke brukervennligheten til spillet skal vi til slutt opprette en ny åpningsscene hvor spilleren får valget mellom å lese bruksanvisningen og å starte spillet. Du lager en slik valg-situasjon ved å lage en enkel meny som består av to knapper.

Den ene knappen skal ha teksten «Instruksjoner», og på den andre knappen skal det stå «Spill!».

En enkel spill-meny

En enkel spill-meny

Opprett først en ny scene ved å kopiere slutt-scenen, og gi den nye scenen navnet ‘Start_scene’. Slett teksten som står der.
Opprett et kube-objekt, og skaler det slik at det får form som en passelig tynn plate. Gi platen avrundete kanter ved å bruke ‘Bevel’ -funksjonen:
Skift til ‘Edit’ -modus, trykk ‘W’ -tasten mens musepekeren er i 3d-scenen, og velg ‘Bevel’ i ‘Specials’ -menyen som åpnes. Beveg musen for å justere hvor stor brett kantene til kuben skal få.

Knapp med bevel

Knapp med bevel

Skift til objekt-modus, og klikk på ‘Set smoot’ -knappen i ‘Link and Materials’-panelet i ‘Editing’-vinduet (F10).
Legg til tekst i knappen ved hjelp av en av disse metodene:
Den ene metoden er å gi knappe-objektet en bilde-tekstur som innholder teksten,  ved hjelp av ‘UV-Unwrap‘ -funksjonen. Den andre metoden er å opprette et tekst-objekt og lime tekst-objektet på platen etter at teksten er konvertert til en mesh:
Når teksten er ferdig redigert (les mer om redigering av tekst-objekt i del 1), flytter du den slik at den ligger over knappe-platen med samme vinkel. Juster tekst-objektet slik at platen danner en fin ramme rundt teksten når du ser knappen forfra:

Tekst-objektet tilpasset platen

Tekst-objektet tilpasset platen

Tilfør tekst-objektet en passelig dybde ved å gi teksten en ‘Extrude’ -verdi på ‘0,010’ i ‘Curve and Surface’ -panelet i ‘Editing’ -vinduet (F9), mens tekst-objektet er i objekt-modus.

Gi dybde til tekst

Gi dybde til tekst

Flytt deretter tekst-objektet slik at det ligger helt inntill platen, og konverter teksten til en mesh: velg ‘Object -> Convert Object Type …’ (Alt + C) i 3d-scenens menylinje, og velg ‘Mesh’ i ‘Convert Font to’ -menyen som åpnes.

Lim deretter plate-objektet og tekst-objektet sammen:
Marker begge objektene (med tekst-objektet markert høyreklikker du på plate-objektet mens du holder ‘shift’ -tasten inne), og velg ‘Object -> Join Objects (Ctrl + J)’ i 3d-scenens menylinje. Klikk på ‘OK’ -knappen for å bekrefte at du ønsker å forene markerte mesher (‘Join selected meshes’).

Skift til redigerings-modus (TAB), og trykk ‘A’ -tasten på tastaturet til alle vertexene i meshen er markert. Trykk ‘W’ -tasten på tastaturet, og velg ‘Remove Doubles’ i ‘Specials’ -menyen for å fjerne overflødige vertexer.

Fjern overflødige vertexer

Fjern overflødige vertexer

Klikk deretter på knappen ‘Removed’ for å bekrefte at du ønsker å slette alle vertexene som er kalkulert som overflødige:

Klikk på knappen for å bekrefte at du ønsker å fjerne alle overflødige vertexer

Klikk på knappen for å bekrefte at du ønsker å fjerne alle overflødige vertexer

For at det skal være mulige å se teksten i knappen, må teksten gis en egen farge. Det vil ellers være vanskelig å skille teksten fra knappe-platen når knappen sees rett forfra.
Du gir en mesh 2 materialer ved hjelp av vertex-groups: Den enkleste måten å gi knappen 2 vertex-grupper på, er å først velge alle vertexene i meshen, og legge disse vertexene inn i én vertex-gruppe (som du tilegner et enkelt materiale). Deretter velger du alle vertexene som tillhører platen, og legger disse vertexene inn i en annen vertex-gruppe (som du tilegner et eget materiale). Ved å opprette vertex-gruppene i denne rekkefølgen slipper du å måtte velge vertexene i de kompliserte bokstavene.

Knappe-objektet med farget tekst

Knappe-objektet med farget tekst

For å gi brukeren av spillet et hint om at knappe-objektene er interaktive meny-valg, skal vi animere knappene slik at de blir større når musepekeren føres over dem. Dette får vi til ved å animere knappene:
Markér en av knappene i 3d-scenen, og trykk ‘i’ -tasten på tastaturet (pass på at tidslinja er i frame 1). Velg ‘Scale’ i ‘Insert Key’ -menyen som åpnes. Gå til frame 2 i tidslinja. Skalér opp knappe-objektet litt ved å trykke ‘S’ -tasten på tastaturet og  trykk 6-7 ganger på ‘PilOpp’ -tasten på tastaturet. Trykk ‘Enter’ -tasten på tastaturet for å avslutte skaleringen. Trykk ‘i’ -tasten igjen, og velg ‘Scale’ i ‘Insert Key’ -menyen.
Knappe-objektet har nå en animasjon på 2 frames.
Gi det andre knappe-objektet samme animasjonen. Pass på at knappe-objektet skaleres like mye opp (6-7 trykk på ‘PilOpp’ -tasten på tastaturet) i frame 2, slik at begge knappene forstørres like mye når musepekeren føres over dem.

Vi skal nå legge hoover-animasjonen inn i spillet:
Markér en av knappene i 3d-scenen. Åpne ‘Logic’ -vinduet (F4), og gi knappe-objektet en ny sensor av typen ‘Mouse over’, og en ny ‘AND’ -controller. Opprett en ny actuator av typen ‘Ipo’, og strekk ut forbindelses-linjer mellom de tre spill-kommandoene.  En actuator av typen ‘Ipo’ gir spillet beskjed om at animasjonens ipo-kurver skal brukes når musepekeren føres over knappe-objektet.
Velg ‘Flipper’ som ipo-type.
Dette forteller spill motoren at animasjonen skal brukes som en hoover-animasjon: animasjonen skal pause i frame 1 så lenge musepekeren ikke er over objektet, og så snart musepekeren føres over objektet skal animasjonen gå til frame 2 og stoppe der så lenge musepekeren befinner seg over objektet. Så snart musepekeren fjernes fra objektet, skal animasjonen gå tilbake til frame 1 igjen og stoppe.
Knappe-objektet må også få en sensor som gir spillet beskjed om å åpne ‘Scene2’ når spilleren klikker på knappen:
Gi knappe-objektet en ny sensor av typen ‘Left button’, og en ny ‘AND’ -controller. Opprett en ny actuator av typen ‘Scene’, og gi den verdien ‘Set Scene’. Skriv ‘Scene2’ i ‘SCE:’ -tekstboksen (scenen med det første spillebrett-rommet). Sett inn forbindelses-linjer mellom disse tre spill-kommandoene.
Dersom du nå testkjører spillet (Trykk ‘P’ -tasten på tastaturet mens musepekeren er i 3d-scenen) vil du oppdage at ‘Scene2’ åpnes uansett hvor i scenen du klikker med venstre musetast! Dette kommer av at vi ikke har gitt spillet beskjed om HVOR musepekeren skal være når venstre musetast klikkes:
Opprett en sensor til, av typen ‘Mouse over’, og forbind den med den samme controller som ‘Left button’ -sensoren har. Nå har vi gitt spillet beskjed om at ‘Scene2’ skal åpnes når venstre musetast klikkes mens musepekeren er over ‘Knapp_spill!’ -objektet.

Knappe-objektenes sensorer

Knappe-objektenes sensorer

Gi ‘instruksjoner’ -knappen det samme sensor-oppsettet, men la actuatorens  ‘Set Scene’ -verdi være ‘Scene1’ (den gamle åpningsscenen vår).

Gjør åpnings-scenen mer spennende ved å sette inn et tekst-objekt med navnet på spillet. Gi teksten tydelig 3d-effekt, og et ekstra glossy materiale. Plassér et spot-lys foran tekst-objektet, og animer spot-lyset slik at det beveger seg bortover teksten mens åpningsscenen er aktiv.

Start-scene

Start-scene

Når et spill innholder flere scener, hvor det også er forskjellige måter å åpne de ulike scenene på, er det ofte nyttig å lage seg et scene-kart, som forklarer samspillet mellom scenene. Ved å lage seg et slikt visuelt hjelpemiddel er det enklere å holde oversikten over navnene på scenene og forholdet mellom dem. Et slikt scene-kart kan du lage vha. penn og papir, eller sette det opp som en Gimp-fil. Formålet er uansett å ha en håndfast oversikt over prosjektet ditt.

scene-kart

scene-kart

Eksporter spillet som en kjørbar (exe) fil

Når du er ferdig med å utvikle spillet, bør du pakke alle filene du har brukt (lyder, bilder, teksturer o.l.) inn i blender-fila, slik at spillet ditt finner dem når det skal kjøres på andre datamaskiner. Pakk inn alle eksterne filer ved å velge ‘File -> External Data -> Pack into .blend file’ i menylinja øverst i Blender-vinduet. Dette vil øke fil-størrelsen til den kjørbare fila, men er helt nødvendig for at spillet skal fungere slik du har planlagt. Eksporter spillet som en kjørbar fil ved å velge ‘File -> Save Game As Runtime …’ i menylinja øverst i Blender-vinduet. Pass på å først ha opprettet en egen mappe på harddisken som skal innholde den kjørbare filen, fordi Blender automatisk også eksporterer flere system-filer (i Windows har disse filene .dll endelse) som er nødvendig for å kjøre spill-fila. Dette er noen av system-filene som ligger i program-mappa til Blender. For å sikre deg at spillet kan brukes på en annen datamaskin, bør du også manuelt legge ved kopier av alle systemfilene du finner i program-mappa til Blender.

Den kjørbare filen er egentlig en kopi av programmet «Blenderplayer», som er programmert til å spille av blender-filen din. (Programmet «Blenderplayer» er et eget program som ligger i program-mappa til Blender). «Blenderplayer» fungerer altså som en slags beholder, som spiller av en blender-fil. Du kan benytte deg av denne egenskapen til «Blenderplayer»:
Dersom du skal utvikle et komplisert spill, som kan bli en svært stor Blender-fil og dermed en svært stor kjørbar fil, så er dette til hinder for bruk av spillet på datamaskiner med små prosessorer og lite minne.
Du kan unngå dette problemet, ved å lage flere små blender-filer som lastes inn i «Blenderplayer» når de får beskjed om det i spillet:

Blenders spill motor har en actuator som heter ‘Game’, og som har en ‘Game’ -type som heter ‘Start new game’. Skriv inn navnet på blender-fila som skal lastes inn i «Blenderplayer» i ‘File:’ -tekstboksen.

 

"Game:Start new game" actuator

"Game:Start new game" actuator

 

Pass på at både blender-fila du arbeider på, og blender-fila som skal lastes inn, ligger i samme mappe, slik at du unngår å skrive inn en fil-bane. På denne måten blir blender-fila di ikke «hardkodet», og kan brukes på andre datamaskiner.

Når du eksporterer spillet som en kjørbar fil i en mappe, så legg ved blender-fila som skal lastes, i samme mappen. «Blenderplayer» vil da automatisk finne blender-fila som spillet spør etter, når ‘Game’ -actuatoren aktiveres, og laste den inn i «Blenderplayer».

kapitel

Det er mange måter å lage spill på med Blender, for spill-motoren er svært avansert med mange muligheter. Jeg har f.eks. ikke omtalt muligheten for å påvirke omgivelsene i et spill fysisk ved hjelp av en avatar (slik som man kan gjøre i spill som ‘HalfLife’ når spilleren flytter kasser ved å dytte til dem), eller hvordan du kan styre objekter med armature. Det som er morsomt med Blenders spill motor, er at den åpner for en visuel og intuitiv måte å lage spill på, som få andre spill-motorer kan tilby. Og resultatene er ofte utrolig flotte; se bare på spill-presentasjonene nedenfor! 🙂

Reklamer
%d bloggere like this: