Nighthawk.dk

I gang med Unity

Skrevet d. 28. Feb. 2022 af Claus Nielsen.

Nu går vi i gang med at bruge Unity! Vi bygger en simpel bane, sætter en first-person-player ind, og bygger et færdigt program/spil som køres udenfor Unity.

Organisering af filer

Inden du går i gang, er det vigtigt at du har styr på opbevaring af dine filer: computerspil består af rigtig mange forskellige komponenter, fordelt på mange slags filer, og det er derfor vigtigt at du ved, hvor du kan finde de forskellige komponenter, når du skal bruge dem.

Du er selvfølgelig velkommen til at bruge dit eget system, men her er min anbefaling til, hvordan du kan gøre det.

Bemærk: Forskel på operativsystemer

Jeg tager i denne artikel udgangspunkt i Windows, men det kan gøres tilsvarende i MacOS og Linux.

Start med at lave en mappe kaldet Spiludvikling et sted på din computer, hvor du nemt kan finde den, f.eks. under i roden af C:-drevet, eller i mappen "Dokumenter". Selv har jeg en anden harddisk i computeren til alle mine data.

I mappen Spiludvikling kan du lave følgende undermapper:

  • Projekter - Her gemmer du alle dine Unity-projekter
  • Textures - Her gemmes textures (næste artikel)
  • Models - 3D-modeller, som kan bruges i dine spil
  • Sounds - Lydeffekter, musik, osv.
  • Packages

Du kan altid lave flere mapper hvis du får brug for det - det gælder bare om at vide hvad man har, og hvor man har det! Den sidste mappe, Packages, er til samlede Unity-pakker, dvs. man kan downloade komponenter som på forhånd er sammensat af f.eks. en 3D-model, et script, og nogle lyde.

Som vi skal se senere, får vi også en række lignende mapper inde i et Unity-projekt, men hvis du først gemmer alt hvad du downloader i disse mapper, er det nemt altid at hente dem ind i nye Unity-projekter.

Start et nyt projekt

Nu er du klar til at lave et nyt Unity-projekt, og det gør du via Unity Hub:

Lav et nyt projekt - vælg 3D, et navn til projektet, og sæt Location til Spiludvikling/Projekter (stien er lidt anderledes i mit setup).

Det skal være et "3D"-projekt, og sæt Location til mappen Spiludvikling/Projekter, hvis du har organiseret filerne som beskrevet ovenfor. Project Name kan du selv vælge.

Der går lidt tid med at oprette et nyt projekt, men når Unity er klar, skulle du gerne se Unity-editoren:

1: Scene-hierarkiet. 2: Properties-panelet. 3: Project-panelet. 4: Scene view. 5: Start/stop og pause spil.

Billedet viser følgende områder:

1 - Scene-hierarkiet

Koncept: Scener

Unity gemmer hver bane i et spil som en scene, så en scene svarer lidt til en bane (eller et level, som man også vil kalde det). Selv menuer og andet 2D-grafik, som evt. kan vises før man kommer ind i en bane i sit spil, bliver også sat op som en scene.

I dette projekt har vi kun en enkelt scene, men større spil vil ofte have flere.

Alt hvad din scene indeholder ligger gemt i scene-hierarkiet, og hvert element ligger gemt som et såkaldt GameObject med en liste af komponenter, som bestemmer egenskaberne af et GameObject. Alt i Unity er GameObjects - og vi kommer til at se meget mere til hvordan de egentlig fungerer.

Lige nu er det vigtigste bare at vide, at en scene består af et hierarki (eller et "træ") af GameObjects - fremadrettet refereres bare til GameObjects i scene-hierarkiet som objekter.

2 - Properties

Hvis du vælger (trykker på) et objekt i scene-hierarkiet, vil du kunne se egenskaberne for objektet i Properties-panelet.

Der er enkelte egenskaber som navn på objektet, og om det er aktivt, som kan sættes på alle objekter. Derudover kan du tilføje eller fjerne komponenter til et objekt, og ændre indstillingerne for de komponenter, som er tilknyttet et objekt.

3 - Project-panelet

Her kan du se og navigere rundt i alle de filer og mapper, som er en del af Unity-projektet. Helt ude til venstre ses en træ-struktur (mappe-hierarki), og resten af panelet viser indholdet i den valgte mappe.

Læg også mærke til, at Project-panelet kun er én ud af flere faner - fanen Console giver dig adgang til Unity's konsol, som er vigtig når du skal til at programmere.

4 - Scene view

Her ser du sit level, placerer både 3D- og 2D-objekter, og bruger dette vindue når du spiller dit spil (se Game-fanen øverst).

Der er masser af indstillinger og værtøjer som kan bruges til scene view, men det vigtigste at bemærke nu og her er, at du kan dobbelt-klikke på et objekt i scene-hierarkiet, for at se det i scene view (såfremt du er på Scene-fanen, og ikke Game-fanen).

5 - Start/stop

Over Midten af scene view finder du tre knapper - den venstre knap bruger du til at starte og stoppe spillet med, når du skal prøve det af, som du har lavet.

Forbered mapper

Nu hvor vi har et Unity-projekt, vil vi lave nogle mapper i projektet til at holde styr på vores filer. Du kan lave en ny mappe således:

  1. Vælg mappen Assets i venstre side af Project-panelet.
  2. Højreklik i højre side af Project-panelet.
  3. Vælg Create -> Folder.

Lav tre mapper med navnene Materials, Scripts og Textures. Du kan selvfølgelig også organisere dine filer på en anden måde, men i de efterfølgende artikler antages det, at vi har denne struktur.

Mappe-struktur i projektet. Højreklik og vælg Create -> Folder for at lave en mappe.

En simpel bane

I scene-hierarkiet er der selve scenen (SampleScene), som har tilknyttet to objekter. Det første hedder Main Camera, og hvis du klikker på det, kan du objektets egenskaber i Properties-panelet. Bemærk at det har en komponent kaldet Camera (udover en Transform-komponent).

Koncept: Camera

I spiludvikling bruger man typisk begrebet Camera om det objekt, som vi bruger til at "se" vores spilverden. Det vil sige, at det som kameraet kan se, er det som vises på skærmen.

Camera-komponenten indeholder en lang række egenskaber som du kan læse mere om her. Det meste er ret teknisk, men når du får mere erfaring med Unity/spiludvikling er det godt at have styr på egenskaber som Projection, Field of View, Clipping Planes, m.m.

Nogle gange har man brug for flere Cameras (eller Views), men i denne artikelserie bruger vi kun et enkelt.

Det andet objekt i scene-hierarkiet er Directional Light, der som navnet antyder er en lyskilde. Hvis du klikker på det kan du igen se en række egenskaber i Properties-panelet; læg mærke til at Transform-komponenten har tre værdier med Rotation. Når du senere har bygget en bane kan du prøve at ændre de tre værdier her for at se hvordan lyset ændrer retning (brug værdier mellem 0 og 360, da det er vinkler i grader).

Lad os starte med at lave en bane, ved at sætte et gulv ind. Højreklik i scene-hierarkiet vælg 3D Object -> Plane. Nu får du et nyt objekt i scene-hierarkiet (Plane), som du evt. kan navngive "gulv" (du kan højreklikke og vælge Rename, eller markere objektet og ændre navnet øverst i Properties-panelet).

Hvis du markerer gulvet (klik på det i scene-hierarkiet), kan du se en række komponenter i Properties-panelet. Lige nu kan du nøjes med at se på Transform-komponenten, hvor du kan ændre positionen og størrelsen på gulvet, samt dreje det. Prøv at lege lidt med værdierne - bagefter kan du sætte alle tre tal i både position og rotation tilbage til 0, og sæt skalering til X=5, Y=1, Z=5.

Prøv også at bruge de forskellige værktøjer i toolbaren lige over scene-hierarkiet, som du kan bruge til at kigge rundt i scenen, samt flytte, skalere og rotere (dreje) objekter. Husk at du bare kan dobbelt-klikke på et objekt i scene-hierarkiet for at se det i scene-view, og du kan bruge Properties-panelet (Transform-komponenten) til at sætte værdier tilbage igen bagefter.

Prøv at starte spillet (venstre knap ved 5-tallet på billedet ovenfor). Du burde kunne se det gulv du har lavet, men kan ikke rigtig gøre noget i spillet endnu. Du ser bare det, som Main Camera viser, og fra dens position.

I Unity's Asset Store kan du finde forskellige player-scripts (eller rettere prefabs, idet det er mere end bare et script), men her kan du downloade det player-script som jeg bruger i denne artikelserie.

Dette player-script er en del af Standard Assets-pakken, som også indeholder andet godt - men desværre virker nogle dele af pakken ikke mere i den version af Unity, som vi bruger. Derfor kan du med linket ovenfor hente en mindre pakke, som kun indeholder en del som virker (med player script).

Bemærk at du også kan finde nyere "standard" player scripts i Asset Store, i de såkaldte "Starter Assets": First Person player og Third Person player.

Lad os prøve at indsætte et player-script så vi kan gå rundt i banen - start med at downloade det her, og pak zip-filen ud. Du kan evt. lægge det i mappen
Spiludvikling -> Packages -> FirstPersonPlayer.

I Unity går du op i menuen Assets -> Import Package -> Custom Package... og vælger den fil, som du pakkede ud af den downloadede zip-fil (FPS Controller Standard Assets.unitypackage). Du vil dernæst få vist et vindue, med alle de komponenter, som findes i Unity-pakken, og du kan bare importere det hele.

Du skulle nu kunne se en ny mappe (Standard Assets) i Project-panelet. Gå ind i mappen Standard Assets -> Characters -> FirstPersonCharacter -> Prefabs. Der ligger to filer i mappen: FPSController og RigidBodyFPSController. Du kan nu tage den ene, f.eks. FPSController, og trække med musen op i scene-hierarkiet.

Nu skulle der være en FPSController i scene-hierarkiet, så nu har du faktisk din player inde i banen. Vi mangler dog lige at gøre to ting! Først skal du slette Main Camera i scene-hierarkiet, for FPSController har sit eget Camera. Dernæst skal du sørge for, at FPSController-objektet hænger over gulvet (og ikke f.eks. nede midt i gulvet), så sørg for flytte det derhen, hvor spilleren skal starte. Jeg har bare sat position på Transform-komponenten af FPSController-objektet til X=0, Y=3, Z=0.

Nu er du klar til at prøve spillet igen - start spillet, og prøv at gå rundt i banen (med W, A, S, D eller piletasterne), kigge rundt med musen og hoppe med Space. Tryk på Esc for at få musen frem, når du vil stoppe spillet.

Brug WASD eller piletasterne til at gå, og musen til at kigge rundt.
Advarsel: Ændringer mens spillet kører

Når du har startet spillet kan du stadig ændre i scene-hierarkiet og Properties-panelet for et valgt objekt. Du kan f.eks. også pause spillet (midterste knap over scene-view, ved siden af start/stop) og gå til Scene-fanen i scene-view. Her kan du ændre din scene og bagefter forsætte spillet i Game-fanen - dette kan være ret smart til at teste ting af.

Når spillet er startet (eller paused) vil ændringer i scenen IKKE blive gemt! Du skal derfor sørge for at stoppe spillet igen når du vil fortsætte med at arbejde på det! Når du stopper spillet vil scenen blive ligesom den var da du startede spillet.

Tip: Playmode tint

For at undgå, at du kommer til at arbejde på scenen mens du har startet spillet (således at dine ændringer ikke gemmes), kan du aktivere Playmode tint. Playmode tint vil lægge en gennemsigtig farve henover alt andet end scene-view når du har startet spillet, så du er sikker på at opdage, at spillet er startet.

Gå op i menuen under Edit -> Preferences og vælg Colors. Her kan du sætte en farve som Playmode tint:

Vælg en farve til Playmode tint - f.eks. blå (evt. lyseblå).

Her har jeg f.eks. valgt en blå farve, og det er nu meget tydeligt når spillet kører:

Nu er det tydeligt når spillet er i gang.

Mure rundt om banen

Du har måske allerede prøvet at løbe ud over kanten af banen - når du kommer udenfor gulvet falder du ned. For at undgå, at man kan løbe ud af banen (gulvet) kan vi lave nogle mure rundt om gulvet.

Højreklik i scene-hierarkiet og vælg 3D Object -> Cube (du kan også bruge en plane hvis du vil). Flyt kassen ud til siden af gulvet, og lav kassen om til en lang mur - enten vha. f.eks. Move og Scale tools (fra toolbaren over scene-hierarkiet), eller ved at skrive tal direkte ind i Transform-komponenten på kassen.

Jeg har sat positionen til X=25, Y=2, Z=0 og scale til X=1, Y=4, Z=50. Prøv selv at lave de tre andre sider.

Mure rundt om banen, så man ikke kan falde ned.

Du har nu lavet en super simpel bane, som du kan gå rundt i. I næste artikel ser vi på, hvordan du kan lave en flottere bane vha. materials og textures, så alle flader ikke bare er hvide.

Build - Byg det færdige spil

Inden du går videre kan du prøve at bruge build-funktionen på dit spil, som laver et færdigt program (spil) du kan starte uden at bruge Unity. Du kan bruge dette hvis du f.eks. vil dele dit spil med dine venner.

Du kan altid bruge Build-funktionen igen senere, når du har lavet mere på dit spil, eller springe det over for nu - her ser vi bare på, hvordan du gør det.

Inden vi bruger Build-funktionen kan du først gå op i menuen under Edit -> Project Settings. Vælg Player i Project Settings-panelet. Her kan du sætte en række egenskaber for det færdige spil:

Du kan vælge mange instillinger for det færdige spil, kig evt. også under Resolution and Presentation.

Du kan f.eks. ændre Company Name og Product Name til hvad du har lyst til. Du kan altid kigge mere på instillingerne på denne side. Prøv nu at gå op i menuen under
File -> Build Settings.

I Build Settings kan du vælge platformen, som du vil bygge dit spil til. Vi bruger bare standard-instillingen (PC, Mac & Linux Standalone). Bemærk at du også kan åbne Player-siden af Project Settings nederst til venstre i Build Settings.

Når du er klar trykker du på Build-knappen, og vælger en mappe, hvor det færdige spil skal gemmes. Jeg har f.eks. lavet mappen:
Spiludvikling -> Projekter -> <Navn-På-Projektet> -> Build, dvs. at det færdige spil bliver gemt i en tom mappe, der ligger sammen med resten af Unity-projektet:

Her vil FirstProject.exe være selve programmet (spillet), der kan køres.

Kør exe-filen (med Unity-ikonet) for at starte spillet.

Sådan lukker du spillet ned

Du kan nu starte spillet op, men vi har endnu ikke lavet en måde at lukke spillet ned på. Derfor må du bruge f.eks. Alt + F4 på Windows for at lukke spillet ned.

Du kan også bruge Windows-tasten på dit tastatur, og så højreklikke på spil-ikonet og trykke Luk vindue.

Hvis du vil sende dit færdige spil til andre, kan du højreklikke på Build-mappen og vælge Send til -> ZIP-komprimeret mappe. Så får du en zip-fil, som du kan sende til andre. Husk bare, at de skal pakke alle filerne ud af zip-filen, før de kan køre spillet. En zip-fil er ikke en almindelig mappe, selvom Windows får det til at se sådan ud.

Relaterede ressourcer
Unity Engine

Game-engine til udvikling af 3D-spil.

Se mere her

×