Unity: Metoder
Det finns några grundläggande metoder för att en virtuell värld bli interaktiv och ge användaren viss kontroll över den.
Flytta objekt (och rotera och skala)
En viktig förmåga i en interaktiv virtuell värld är att interaktivt kunna flytta, rotera och/eller skala objekt i världen, det vill säga ändra något av ett objekt så kallade transform-egenskaper (position, rotation, skala). Det är det som gör objektet ”levande”, skiljer en interaktiv virtuell värld från t.ex. en bild eller ett videoklipp.
Det mesta du kommer att göra för att skapa din virtuella värld är att få saker att röra på sig, antingen på användarens kommando, eller på ditt.
Du flyttar på objekt på med hjälp av en gameobjektets komponenter. Komponenten Transform sitter alltid på alla gameobject, så den komponenten kan du alltid använda. Men behöver du t.ex. upptäcka krockar behöver du flytta objektet med en komponent som just kan upptäcka krockar.
Var du ska flytta ett objekt bestämmer antingen du som utvecklare, eller användaren via input. Se ’Hämta input från användaren’ nedan för hur du låter användaren påverka objektens transforms.
Ändra transforms vs animering
Med att ”flytta på objekt” (eller rotera eller skala) menas här att skript/programmering ändra ett objekts transforms. Med den metoden kan du reagera på användaren, omgivning eller andra förutsättningar i din värld.
En animering är en förinspelad förändring av ett objektet, en skriptad rörelse som inte går att ändra. För komplicerade förändringar av objekt, såsom gå- och spring-rörelser rekommenderas animering. Medan att flytta på själva objektet som går eller springer bör skötas med ”flytta” / ändra transforms-egenskaper.
Hur du hanterar animeringar beskrivs under egen rubrik nedan.
Hämta input från användaren
För att få en virtuell värld att upplevas interaktiv, måste användaren få påverka den. Och då behöver du som utvecklar världen förstås kunna få input från användaren.
Att enkelt och effektivt leverera användar-input till skript är en av de viktigare sakerna Unity hjälper till med. Det kan annars vara krångligt och tekniskt, speciellt om man behöver ta hänsyn till olika plattformar, för att inte säga olika input-tekniker som tangentbord och spelkontrollers.
Unity’s Input består huvudsakligen av två delar
- En konfiguration med kontroller- /tangent-mappning – görs i Editorn
- Ett Input-programmeringsobjekt som kan läsas av i skript, alternativt Unity messages (events/händelser) som du i skript kan skapa lyssnare för
Användarens input konverterar du till förflyttningshastigheter eller aktiverar händelser eller värde-förändringar med if-staser och metod-anrop i dina skript.
Upptäcka krockar (collisions)
När du har fått saker att röra på sig i din virtuella värld, så kommer att upptäcka när objekt krockar (collides) med varandra vara en av de viktigaste metoderna.
Att upptäcka krockar kan användas till mycket, som t.ex.:
Hinder, väggar och mark
Med krockar kan du hindra att spelaren, eller andra objekt, kan passera genom gameobjects. En viktig sak för inlevelsen. Du är ju van vid inte inte falla genom golvet, eller kunna gå genom väggar, i verkligheten. Andra saker krockar t.ex. kan användas till:
- Spelaren ”plockar upp” eller ”fångar” saker
- Kontrollera om saker som spelaren skjuter eller kastar träffar något.
Triggers – upptäcka när ett gameobject befinner sig på en viss plats
Du kan i en virtuell värld inte undersöka gameobject1.position == gameobject2.position. Du kan visserligen göra det, men det är väldigt osannolikt att två position är exakt lika. Du får nöja dig med att undersöka om en position är inom ett område.
Det enklaste sättet att göra detta är låta området representeras av ett osynligt gameobject som täcker området, och kolla om något krockar med det. En sådan typ av krock kallas trigger.
Animera
Notera först att att animera inte är interaktivitet. En interaktivitet, t.ex. att spelaren trycker på en tangent, eller att gameobject flyttas av en reagerande algoritm till en plats, kan trigga en animering, men animeringen som sådan är en skriptad företeelse utan interaktion.
Likväl använder vi animering väldigt mycket i interaktiva virtuella världar för att skapa inlevelse och förstärka intryck.
”Animeringar” skapade av programmering, t.ex. en rotations-animering där du med kod förändrar ett gameobjects vinkel runt z-axeln över tid, räknas inte som en animering då du teoretiskt kan förändra ”animeringen” medan den pågår, med if-satser eller t.ex. ändra vilken axel rotationen ska ske runt.
En riktig animering är en ”inspelning” som inte går att ändra på under uppspelning (annat än hastighet)
I Unity kan du använda två typer av animeringar
- Animeringar skapade i Unity: Du kan ”spela in” animering i Unity, genom att ändra på ett gameobjects transforms (position, rotation, skala) över tid.
- Animeringar sparade i 3D-meshes eller 2D-sprites: I 3D-modellerings- och spriteredigeringsprogram, kan du skapa animeringar som sparas i meshen eller spriten.
Då Unity inte har några ambitioner att vara ett animeringsprogram, och dess skapa-animeringar-verktyg är simpelt, så brukar man oftast skapa animeringarna i de program man använder för att skapa 3D-modeller och sprites. Men för enklare animeringar som att öppna/stänga dörr, duger Unity’s verktyg.
