Unity – Nödvändiga Kunskaper

Download pdf here: Unity_01

New Project – förbered ditt projekt rätt
En scen är en grundläggade bit av ett komplett spel, en del av det färdiga spelet. Det kan alltså vara allt från en level till en ”main meny”. Ett projekt består av en eller flera scener – så där är skillnaden mellan scen och projekt.

Till att börja med, när Unity startas, spara scenen i en mapp och namnge den ”Scenes”. Skapa ett par mappar i Unity (eftersom Unity inte alltid uppdaterar mappar korrekt som skapas utanför programmet). Kan du inte se ”Scenes”-mappen, högerklicka i mappstrukturen och välj re-import. Nu skapar vi resten av mapparna vi behöver för att hålla en bra struktur på vårt projekt.

  • Scenes (för alla scener)
  • Materials (alla texturer)
  • Audio (allt ljud)
  • Models (alla 3d-modeller)
  • Prefabs (alla prefabs)
  • Scripts (alla script)
  • Animations (alla animationer)
  • GUI
PLAY PAUSE & STOP
Detta är viktigt att känna till. Man kan ALLTID förändra värden och ta in nya GameObjects, oavsett om Unity kör koden eller ej, men viktigt är att allt som görs medan Unity kör koden är TEMPORÄRT. Detta innebär att alla förändringar ni gör medan Unity körs sparas ej!Game Object – hur vi skapar ett objekt
Allt som placeras i vår scen i Unity är GameObjects. Du skapar GameObjects genom att öppna:

  • Game Object Menyn
    • Create Other/Create Empty

Exemplet ovan illustrerar ett tomt GameObjekt. Ett tomt GameObjekt kan fyllas med exempelvis en mesh och script. Alla GameObjekt som skapas placeras i Hierarkin och i spelvärlden.

Om vi skapar ett GameObject som är en kub gör ni det under submenyn Create Other. Där kan ni även skapa olika ljuskällor.

Kuben kommer att inneha följande värden i skala 1x1x1. Detta innebär att kuben är 1 unit i X, 1 unit i Y och 1 unit i Z. Men vad är 1 unit? En unit motsvarar 1 meter (i Unity), så det är relativt lätt att komma ihåg.

För att se allt så korrekt som möjligt när Unity körs så bör ni placera in ett ljus i scenen också. Lägg till en Point Light genom att öppna:

  • Game Object Menyn
    • Create Other
      • Point Light

Labeling – Namngivning av objekt
Namnge allt i er scen! Gör detta i “Inspector” alternativt gör ni det i Project. Markera bara ditt GameObject och ge det ett nytt namn. Detta ändrar namnet på ALLA ställen (Hierarkin, Project, Inspector. Ändrar ni namnet i Hierarkin så ändras enbart namnet för det specifika GameObjectet. Använd en god namngivningskonvention (CamelCasing rekommenderas), exv. woodenChair, woodenChair02, steelChair, alternativt WoodenChair, WoodenChair02, SteelChair, osv.

Kontrollerbara objekt – så att vi kan röra oss
Ofta tar det lång tid att skapa en FPS-kamera och kontroll, men det går väldigt snabbt i Unity eftersom det finns färdigskapat redan. I mappstrukturen finns ett sökfält. Skriv in ”first” så borde ni hitta ”first person controller”.

Kolla in den så kanske ni lägger märke till ser det ut som ett par lådor högst upp, dessa kallas för “prefabs”!  Vi kommer snart tillbaks till vad en prefab är. I detta fall är vi enbart intresserade av First Person Controller (den blå lådan).

När vi skapar en FPS-kontroll i Unity så skapas en ny kamera under First Person Controller som vi kan kontrollera, detta innebär att vi måste radera bort den första kameran (Main Camera) så att inga konflikter uppstår dem emellan. Den första kameran (Main Camera) skapas när vi skapar ett nytt projekt/scen.

FPS-kontrollen i Unity har INTE s.k. för RigidBody-fysik (RB) i Unity, utan snarare ”karaktärsfysik”. Den delen som styr karaktärens fysik kallas för Character Controller. RB-fysik används för bilar, tunnor och dylikt, men inte till karaktärer. Detta är en form av hack i fysikmotorn så att fysikens lagar INTE råder över karaktären. Exempel på RB och Character Controller: Hade vi applicerat RB-fysik på en karaktärs kropp så hade karaktären trillat omkull hela tiden eftersom fötterna oftast inte är tillräckligt stora sett till kroppen så att karaktären kan stå av sig självt. Karaktären hade förmodligen trillat omkull.

Under First Person Controller finner ni två komponenter ”Graphics” samt ”Main Camera”. Graphics styr bara First Person Controllers utseende, denna kan vi ersätta med en egen mesh om vi så önskar.

Allt som vi som spelare ser/hör placeras här i kameran.

Prefabs (en färdig ”klass”)
Som skrivet tidigare är FPS-kontrollen en Prefab. När något är färdigt och redo att användas i spelet eller leveln gör man det till en prefab.

Om du är insatt i programmering så kommer du att känna igen Prefab som ett objekt (en färdig klass). Från ett objekt kan vi skapa instanser. En Prefab är ett objekt. Ett objekt kan ha många instanser i spelvärlden. En instans är en kopia av ett objekt som agerar på sitt eget sätt. Ett objekt är allt från en grå låda till en färdiganimerad modell med tillhörande script. Ändrar vi beteendet eller utseendet på vår Prefab så kommer alla instanser (kopior av den) i spelet också ändras.

Hur skapar vi en Prefab?
Högerklicka i mappstrukturen så kommer du att kunna välja Newà prefab. Den kommer se vit ut och heta New Prefab. En vit Prefab är en tom Prefab. Så om du har ett objekt med script och texturer osv kopplat till sig så kan du dra in den till vår tomma Prefab och då blir den blå. En blå Prefab är en Prefab som innehåller information. Namnge dem du skapar samt placera dem i rätt mapp. Snyggt och prydligt ska det vara!

Ändra en Prefab
Om vi skulle kolla en Prefab, så skulle vi kunna se alla dess egenskaper och attribut. VI kan förändra Prefabens värde och de appliceras på alla nya instanser som skapas. Lägger vi till ett Script så appliceras det på alla existerande instanser.

Om vi vill applicera nya värden i en instans även på vår Prefab så måste ni klicka på knappen ”Apply” i Inspector. Uppmärksamma att alla värden kommer att förändras när ni trycker på ”Apply”, detta innebär även att positionerna för vår Prefab också ändras.

Om ni skulle tappa bort vilken instans som hör till vilken Prefab så är det lätt kollat. Välj instansen i Hierarkin och tryck select i Inspector. Mycket smidigt när man får många objekt i sin scen.

Losing our Prefab?!
Om vi lägger till en komponent på ett GameObject (något som används i spelet). I exemplet nedan sker det när jag lägger till ett script på Testblock. Plötsligt skiljer sig Instansen för mycket från dess Prefab och tappar därmed alla dess kopplingar, så att några förändringar som sker som tidigare påverkat instansen påverkar inte längre. Detta kommer ni se ett exempel på när vi skapar en box som ska påverkas av spelets fysik.

Låt oss skapa en box med kollisioner
Eftersom vi aldrig testade att skapa kollisioner eller RB-fysik för vanliga döda objekt, så gör vi det nu. Skapa ett nytt GameObject av typen Cube.

Precis som Graphics som vi hittade under ”First Person Controller” så innehar en vanlig GameObject Cube liknande egenskaper.

Men det finns en viktig skillnad, kan ni se den? (Bilden ovan är Graphics och bilden under är Cube)

Vår ”Cube” har en Box Collider (en grön låda). Detta saknar Graphics då den inte ska drabbas av RB-fysik framöver.

Om vi markerar Box Collider så kan ni se i fönstret att det syns en Grön wireframe, detta är området som kolliderar. Detta innebär att kollisionsbox kan vara en bra bit utanför den faktiska meshen, till och med på helt fel ställe om så önskas.

Nu när objektet har en kollisionsbox så kan vi ge den egenskapen att drabbas av spelvärldens fysik. Vi lägger nu till Rigidbody-fysik på lådan. Gå in i component à physics å rigidbody

Nu läggs komponenten ”RigidBody” till i det valda GameObject (i mitt fall TestBlock). Ni kommer att få en varning, klicka OK bara.