Artikel top billede

(Foto: Computerworld)

Lav et 3D-spil med Unity

Det er ikke nemt at udvikle spil. Det er i hvert fald den generelle opfattelse. Og sandt er det, at hvis man taler om at lave et spil fra grunden med et almindeligt programmeringssprog, er det svært. Men nu om dage behøver det slet ikke være så indviklet. Der findes redskaber, som tilfældigvis er ganske gratis, og som gør det at lave et spil til en fornøjelse i stedet for en pligt. Det er næsten som at spille et spil. Unity leverer en grafisk brugerflade, som man snarere ville vente at finde i et brugervenligt 3D-modelleringsværktøj med kameraer, lyskilder og modeller. Man kan få noget imponerende op at køre på få minutter. Se her hvordan.

Af Torben Okholm, Alt om Data

Denne artikel er oprindeligt bragt på Alt om Data. Computerworld overtog i november 2022 Alt om Data. Du kan læse mere om overtagelsen her.

Unity Personal Edition er gratis på http://unity3d.com. Når du har installeret det, åbner du Unity og klikker ‘New Project’. Kald dit projekt ‘IslandRun’. I det samme billede klikker du på knappen ‘Asset Packages’. Klik ud for boksene ‘Cameras’, ‘Characters’, ‘Environment’ og ‘Vehicles’, og klik ‘Done’ efterfulgt af ‘Create Project’. Det tager lidt tid at indlæse biblioteket over spildetaljer, og en bjælke viser, hvor langt du er nået.

» I Unity Editor ser du et skærmbillede, der ligner enhver 3D-modelleringspakke. Øverst har du hovedscenen, hvor du skal placere dine 3D- eller 2D-objekter. Dem kan du selv lave med værktøjer som Gimp og Blender og importere dem, men i denne guide bruger vi færdiglavede elementer fra de biblioteker, du netop har indlæst. Betragt scenevisningen som et filmstudie, hvor du samler komponenterne før en optagelse.

2 Scenen er sat

Hvis du klikker på fanen over scenevisningen, skifter vinduet til spilvisning, ‘Game’. For at blive i filmmetaforikken viser spilvisning kun det, publikum kan se. Klik på fanen ‘Scene’, før du fortsætter. Til venstre for disse vinduer er der en liste over alt det, der i øjeblikket er på scenen. Betragt den som regissørens liste. Hvis du klikker på kameraet på listen, bliver kameraet fremhævet på scenen.

» Når du skriver ‘cam’ i søgefeltet foroven, får du isoleret alt det på listen, der rummer bogstaver. Det er ekstremt nyttigt, når man skal finde ting på en overfyldt scene. Yderst til højre har du Inspector [Billede A], der viser oplysninger om det kamera, du har valgt. Slet bogstavet fra søgeboksen, og vælg så ‘Directional Light’ i din Hierarchy-liste. Du ser nu detaljerne blive afløst af dem, der knytter sig til din belysning.

3 Fald ikke i vandet

I øjeblikket er der ikke noget at se. Lad os begynde opbygningen. En af de enkleste, men mest effektive ting, man kan gøre, er at begynde med vand – det er visuelt interessant og danner naturlige kanter.

» Under scenevinduet er der en projektliste, som rummer alle de spil-elementer, du har indlæst i projektet. Vælg ‘Standard Assets > Environment > Water > Water > Prefabs’, og træk så elementet ‘WaterProDaytime’ ind i din Hierarchy-liste. Den kommer nu frem på din scene. Ovenfor til venstre har du fem knapper. Vælg den fjerde. Klik på den lille boks i midten af din ‘Water’-prefab, hold den venstre museknap nede, og træk opad. Nu bliver vandet skaleret op. Gør det nogle gange [Billede B].

4 Bølgegang

Den Water-prefab, du har sat ind på din scene, er en flad skive, og der er allerede knyttet et Material til den. Klik på knappen ‘Play’ foroven, og se, hvad den ellers har at byde på. Bemærkede du, at når du klikker ‘Play’, kører Unity script, der animerer bølgerne? Nu har vi altså en kameravisning, der forbliver statisk og peger mod horisonten på en scene med en enkelt lyskilde, som simulerer spredt lys fra himmelen, og et fladt plan med vandmateriale på. Og et script sørger for, at vandet bliver animeret med tiden. Gå til ‘File > Save Scene’, skriv ‘IslandRun_Scene’, og klik på ‘Save’.

5 Lav et ølandskab

Unity har Terrain-redigeringsværktøjer, som vi nu skal bruge til at lave en ø. Gå til ‘Game Object > 3d Object > Terrain’. I Inspector skriver du ‘X -250’, ‘Y -5’ og ‘Z -250’. Det placerer terrænet i midten af Water, idet terræn-standarden er en firkant på 500. ‘-5’ i y-aksen placerer vandet over terrænet.

» På dette stade skal du også indsætte vandet, således at det rækker længere ud end terrænet. Vælg det, og skriv ‘X 1000’ og ‘Z 1000’. Nu vil vi hæve dele af terrænet og lave en ø. Mens ‘Terrain’ er valgt, klikker du på knappen ‘Raise/Lower Terrain’. Vælg en af de grove pensler, og øg dens størrelse til ‘100’ og Opacity til ‘50’. Mal øens facon på Terrain.

» Dernæst reducerer du penslens størrelse og gennemsigtighed og gentager processen for at tilføje detaljer. Endelig bruger du funktionen ‘Smooth Height’, hvis dit terræn er for bulet. Du kan zoome ind og ud og panorere rundt med den midterste museknap. Klik på knappen ’Paint Texture’, og vælg ‘Edit Textures’ og ‘Add Texture’.

» Du tilføjer og maler mønstre på din ø ved at klikke ‘Select’ på den firkant, der hedder ‘Albedo (RGB)’. Blad ned, og find ‘SandAlbedo’. Dobbeltklik. Vælg ‘Add’. Du vil nu se, at sandet er blevet brugt i hele dit terræn. Tilføj nu endnu en tekstur på samme måde, idet du vælger enten ‘Cliff’ eller ‘Rocky’. Brug penslerne på samme måde som før til at male øverst på det sandede terræn, hvis du vil have et klippestykke til at stikke frem. [Billede C].

6 Tilføj spilleren

Lad os tilføje en ‘Player Controller’, således at vi kan gå rundt i spillet. I fanen ‘Project’ går du til ‘Assets > Standard Assets > Characters > FirstPersonCharacter > Prefabs’ og trækker controlleren ‘RigidBody’ hen på dit terræn. Zoom med knappen ‘Move’ valgt (øverst til venstre, anden knap), træk den gule akse op, indtil den grønne rammeboks netop er fri af jorden.

» Så er tiden inde til en testkørsel! Klik fanen ‘Game’, og klik på ‘Play’. Hvis din figur falder gennem gulvet, går du tilbage til Scene og flytter din player-prefab lidt op. Når du trykker ‘Play’, bør du kunne gå rundt på din ø og nyde udsigten.

» Du bemærker måske, at din player kan gå ud i vandet og forsvinde. Tilføj et andet ‘3D Object’ ved denne gang at vælge ‘Plane’. Skaler det ‘200’ i X og Z, og stil så Transform af Y til ‘-1’, så kommer det lige under vandet [Billede D]. Vælg ‘Mesh Collider’, men fravælg ‘Mesh Renderer’. Nu har vi lavet et usynligt plan lige under vandet med en Collider, der stopper det, som måtte gå under vandet.

» Nu skal du tilføje træer. I Terrain-sektionen vælger du ‘Place Trees’ og klikker ‘Edit Trees > Add Tree’. Klik på cirklen i dialogboksen Add Tree. Vælg ‘Broadleaf Desktop’, og klik ‘Add’. Sæt Brush Size til ‘20’ og Tree Density til ‘50’. Mal på terrænet, hvor du vil have træer.

» Gå til knappen ‘Paint Details’. Klik ‘Edit Details’ og ‘Add Grass Texture’. Klik på cirklen, og dobbeltklik på en ‘GrassFrond’-tekstur. Vælg ‘Healthy Color’, og gør den lidt mindre lysende. Gør det samme med ‘Dry Color’. Klik ‘Add’. Skift ‘Brush Size’, ‘Opacity’ og ‘Target Strength’ til henholdsvis ‘30’, ‘0.07’ og ‘0.07’.

» Brug penslerne som før, og læg græs, hvor du vil have det [Billede E]. Afprøv dit spil, og se, hvordan det virker. Gå så tilbage, og tilføj eller fjern sager ved at holde [Shift] nede, mens du maler. Du skal huske, at græs kun kan ses, når man er i nærheden af det.

7 Arranger jægeren

Vi vil tilføje et fjendtligt fly, der skal jage din player. Dette fly går efter denne player, som derfor skal holde sig i bevægelse. Gå til ‘Standard Assets’ igen, og find ‘Aircraft’-prefabs. Træk ‘AircraftJetAI’ eller ‘AircraftPropellerAI’ ind i din ‘Hierarchy’-fane. Dobbeltklik på den for at centrere visningen.

» Brug knappen ‘Translate’ (øverst til venstre, anden knap) til at flytte flyet op over vandet og ud over havet. I Inspector-sektionen blader du ned til ‘Aeroplane AI Control’ og vælger derefter cirklen ved Target. Vælg Select ‘RigidBodyFPSController’. Tilbage i Inspector fravælger du ‘Waypoint Progress Tracker’.

» Afprøv spillet. Flyet kommer og styrter sandsynligvis ned. Det ordner du ved at vælge dit usynlige ‘Plane’ og højreklikke, vælg dernæst ‘Duplicate’. Flyt kopien til ‘Y 35’, eller hvad der nu virker i dit terræn. Slå midlertidigt ‘Mesh Renderer’ til for at se flyet. Sørg for, at det kommer op over alle højdepunkter i dit terræn.

Grafikken i spil er blevet forbedret kolossalt i årenes løb, men grundformatet har ikke ændret sig. Objekter består af meshes, der igen består af polygoner, som regel trekanter eller firkanter. Betragt dem som hønsenet, der bliver bøjet i facon med papmache ovenpå. Man får en 3D-figur, men ingen detaljer eller farver, hvorpå man kan tilføje materialer. Materialer består af en tekstur, der hedder Albedo i Unity 5. Den rummer den basale farveinformation.

Hertil kommer ekstra sager som et Normal-kort, der definerer detaljer som riller, revner, bump og ridser. Et materiale kan også have et kort, der fortæller Unity, hvor der er områder med konstant skygge, eller et kort, der styrer de dele af materialet, der skal skinne. Et højdekort bruges for eksempel i materialer, hvor højden bliver styret af graden af gråt i et gråtonebillede. Du kan finde flere oplysninger fra Unity-teamet på http://bit.ly/1zMyBHc eller det mere avancerede http://bit.ly/17Tedr9.

Nu bør dit spil være klar til en afprøvning uden for Unity-udviklingsmiljøet. Gem ‘Scene’ og ‘Project’. Gå så til ‘File > Build Settings’. Vælg ‘PC Mac & Linux Standalone’. Vælg Target Platform som ‘Windows’, og vælg, om du vil have x86 til 32-bit-maskiner eller x86_64 til 64-bit-systemer.

Klik ‘Add Current’ for at føje din Ø-Scene til spillet. Klik på ‘Player Settings’. Skriv firmanavn og eventuelle andre detaljer, for eksempel en splash-skærm. Klik på ‘Build’, og skriv filnavnet. Klik ‘Save’. Når det er gjort, kopierer du den eksekverbare fil til din testmaskine (vi vil ikke anbefale at køre den direkte fra en USB-nøgle) og starter spillet ved at dobbeltklikke på filen. Det er det hele.