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.

Notera: Metod-beskrivningarna här kommer att beskriva hur du flyttar på gameobjects, men samma metoder gäller för även för att rotera och skala objekt.

Du flyttar på objekt med hjälp av någon komponent

Enda sättet för dig att flytta ett gemaobject är att be en av objektets komponenter att göra det. Vilken komponent du ber sköta förflyttning, bestämmer också hur den förflyttningen sker.

Du kan också skapa en instruktion om förflyttning på två olika sätt:

  • Absolut metod: Ange en ny position i världens koordinatsystem för objektet
  • Relativ metod: Ange hur mycket utefter respektive axel objektet ska flytta på sig

Beroende på vilken komponent du kommer att använda för förflyttningen, så behöver du använda den ena eller andra metoden. En del komponenter stöder bägge metoderna, andra bara en av dom.

Transform-komponenten

Du kan tryggt alltid flytta objekt med Transform-komponenten, den finns alltid på alla gameobjects. Det är den enda komponenten som alltid måste finnas på ett gameobject. Den stöder dessutom absolut- och relativ förflyttning.

Transform-komponenten flyttar objekt utan krusiduller, den kollar inte efter krockar, den ”tänker” inget, bara flyttar. Behöver du ha mer ”smart” algoritmisk förflyttning, finns det färdiga komponenter som hjälper till med detta (se nedan). Du kan förstås alltid själv skapa en ”smart” förflyttnings-komponent som – när allt arbete är klart – flyttar objektet med den vanliga Transform-komponenten.

Komponenter som flyttar objekt (och kanske roterar) objekt

Då den enkla Transform-komponenten flyttar objekt utan att ta hänsyn till någonting, så finns det ett andra inbyggda komponenter du kan lägga gameobject’s för att få förflyttningar som tar hänsyn till saker som andra objekt och gravitation. Det vanligaste andra komponenter än Transform tar hänsyn till är andra gameobjects Colliders, som fungerar som krockbara hinder för en förflyttning.

Nedan är en sammanställande lista av de vanligaste sådana komponenter, med länkar till mer detaljerade beskrivningar.

KomponentSyfteAbsolut och/eller relativ förflyttningBeskrivning
TransformSköter ett gameobjects position, rotation och skala i världens koordinatsystem. Om positionen ändras, flyttas objektet till en ny plats.Absolut och relativFlyttar objekt till nya positioner utan hänsyn till någonting
CharacterControllerEnkel krock-kontroll, utan gravitationRelativStoppar förflyttningen om en Collider är i vägen. Kan ”gå” i trappor och upp för ramper. Ingen inbygd graviation dock
RigidBodyAktiverar fysik-beräkningar på gameobjectet, inklusive krock-kontroll. Innehåller gravitation Inget. Du använder krafter och ”knuffar” objektet.Du lämnar helt över objektets förflyttning och rotation till komponentens fysikberäkningar. Istället för att ”flytta” så ”knuffar” du objektet i olika riktningar. Krockar och studsar(!) med/mot Colliders
NavMeshAgentAktiverar en AI-agent själv tar fram närmaste väg runt hinder från sin position till ett mål. Sköter själv förflyttning och hastighetsökning/-minskning (när andra t.ex. AI-agenter är i vägen) AbsolutKräver att en annan komponent finns närvarande i scenen som skapar en så kallad NavMesh. NavMeshen är den yta i vilken AI-agenten får röra sig. AI-agenten ges en position som den ska ta sig till, och den löser det sedan själv. Den positionen kan uppdateras i realtid och t.ex. vara spelarens position.

boss