Är du ny på Unity? Vill du lära dig att ta emot input från spelare och flytta karaktärer runt på skärmen? Vi har skapat den här guiden för att visa upp tre olika sätt som du kan styra spelarrörelser i Unity.

Oavsett om du är ny på kodning eller har lite erfarenhet bakom bältet, kommer den här C#-handledningen att få dig på fötter och dina karaktärer på deras.

Låt oss börja.

Spelarrörelse i Unity: Samla in input

Först och främst måste du veta hur du fångar in input från användaren och omvandlar dem till rörelse i spelet. Unity gör detta ganska enkelt så länge du vet var du ska leta.

Med Unity öppen, klicka på Redigera i det övre verktygsfältet. Välj nu Projektinställningar. Välj från listan till vänster Input Manager. Välj Yxor, fyller i listan med indatavärden. Du vill titta på Horisontell och Vertikal för grundläggande rörelse.

Du kommer att använda dessa axlar tillsammans med Inmatning. GetAxisRaw(); för grundläggande rörelse i nästa avsnitt.

Spelarrörelse i enhet med hjälp av en stelkropp och kolliderare

instagram viewer

Nu när du känner till namnen på axlarna kan du använda dem för att styra spelarens rörelse.

I ditt Unity-projekt Hierarki visa, högerklicka och välj 3D-objekt > Kapsel att skapa det du kommer att ge rörelse åt. Se till att använda samma taktik för att skapa en mark Plan för din kapsel att stå på.

Se till att återställa Omvandla värdet av båda objekten och flytta din Kapsel så att den står på planet. Byt namn på din kapsel till något som "Spelare" för enkel identifiering.

Relaterad: The 5 Unity Game Development Languages: Vilka bör du lära dig?

Klicka på Spelare objekt och, i Inspektör visa, scrolla ner till Lägg till komponent. Lägg till en Stelkropp, och lägg sedan till en annan komponent som en Capsule Collider den här gången. Du behöver dessa komponenter för att lägga till fysik, och därmed rörelse, till din Spelare.

Högerklicka sedan i din Manus mapp och Skapa en ny C#-skript. Döp det här skriptet till något i stil med "PlayerMovement". Om du planerar att lägga till flera typer av rörelser för olika karaktärer eller kontrollertyper, vill du skapa många olika skript för varje typ av rörelse. För närvarande fokuserar vi på grunderna och använder ett skript.

Se även: Vad är modulär programmering i Unity och varför är det viktigt?

Dubbelklicka på ditt skript för att öppna det. Du kommer att mötas av ett standard Unity-skript:

använder System. Samlingar;
använder System. Samlingar. Generisk;
använder UnityEngine;
offentlig klass PlayerMovement: MonoBehaviour
{
// Start anropas före den första ramuppdateringen
void Start()
{

}
// Uppdatering anropas en gång per bildruta
void Update()
{

}
}

Du kan ta bort använder System. Samlingar; och använder sig avSystemet. Samlingar. Generisk; eftersom de inte behövs för det här skriptet.

Med det ur vägen, fokusera på

public class PlayerMovement: MonoBehaviour {

tills vidare. Inuti det öppningsbara locket, skapa en offentlig flyta variabel namngiven hastighet eller något liknande. Detta hastighet variabel är en multiplikator som styr hur snabbt vår Spelare flyttar efter lite mer programmering. För nu, ställ in hastighet lika med något liknande 10f.

Du måste också låta Unity att det finns en Rigidbody att manipulera i det här skriptet. Detta görs med nyckelordet Stelkropp och ett variabelnamn – vi väljer rb.

offentlig klass PlayerMovement: MonoBehaviour
{
allmän flythastighet = 10f; //Kontrollerar hastighetsmultiplikatorn

Stelkropp rb; //Berättar för skriptet att det finns en rigidbody, vi kan använda variabeln rb för att referera till den i ytterligare skript

Det är allt du behöver lägga till i det här avsnittet. Gå nu vidare till void Start(). När du startar spelet måste du ställa in rb variabel lika med StelkroppSpelare såhär:

void Start()
{
rb = GetComponent(); //rb är lika med den stela kroppen på spelaren
}

Ta nu en titt på void Update() fungera. Det här är funktionen du kommer att använda för att ständigt fånga ingångar från spelarnas tangentbord, kontroller, etc. Kom ihåg när du kollade Projektinställningar för Ingångsaxlar? Du kommer att använda dem här.

void Update()
{
float xMove = Ingång. GetAxisRaw("Horisontell"); // d nyckel ändrar värde till 1, en nyckel ändrar värde till -1
float zMove = Ingång. GetAxisRaw("Vertikal"); // w-tangenten ändrar värde till 1, s-tangenten ändrar värde till -1
rb.velocity = new Vector3(xMove, rb.velocity.y, zMove) * hastighet; // Skapar hastighet i riktning som är lika med tangenttryckning (WASD). rb.velocity.y hanterar fallande + hopp genom att sätta hastigheten till y.

}

Oroa dig inte om du känner dig överväldigad när du hoppar in koden; vi förklarar det steg för steg. Skapa först en flyta variabel med ett namn som xFlytta, och sätt den lika med Inmatning. GetAxisRaw("Horisontell");

Inmatning. GetAxisRaw(); är Unitys sätt att spela in spelaringångar från Yxor du hittade i Projektinställningar. Du kan läsa mer om det i Unitys officiella dokumentation. "Horisontell" kommer från Horisontell axel namn i Unity. Denna axel styr vänster och höger rörelse med "a" och "d" knapparna.

Som ni säkert kan gissa vid det här laget, float zMove = Ingång. GetAxisRaw("Vertikal"); gör samma sak utom för tangenterna "w" och "s".

Relaterad: De bästa Unity 3D-handledningarna för nybörjare

Därefter lägger du det hastighet variabel som du skapade i spelet och slutför den sista pusselbiten för spelarrörelse i Unity.

rb.velocity = new Vector3(xMove, rb.velocity.y, zMove) * hastighet; // Skapar hastighet i riktning som är lika med tangenttryckning (WASD). rb.velocity.y hanterar fallande + hopp genom att sätta hastigheten till y.

Gå tillbaka till Unity's Inspektör vy för Spelare objekt. Ta en titt på Stelkropp-under Info, ser du ett värde Hastighet. Det här är värdet du riktar in dig på rb.hastighet.

ny Vector3(xMove, rb.velocity.y, zMove) * hastighet, skapar en ny vektor med de angivna x-, y- och z-värdena och multiplicerar sedan vektorns värde med hastighet.

Se till att dra Spelarrörelse skript på Spelare objekt i Unity, och det är det! Sammantaget har du ett fungerande C#-skript som tar input från spelaren och omvandlar dem till karaktärsrörelser i Unity.

Här är den färdiga koden:

använder UnityEngine;
offentlig klass PlayerMovement: MonoBehaviour
{
allmän flythastighet = 10f; //Kontrollerar hastighetsmultiplikatorn
Stelkropp rb; //Berättar för skriptet att det finns en rigidbody, vi kan använda variabeln rb för att referera till den i ytterligare skript

// Start anropas före den första ramuppdateringen
void Start()
{
rb = GetComponent(); //rb är lika med den stela kroppen på spelaren
}

// Uppdatering anropas en gång per bildruta
void Update()
{
float xMove = Ingång. GetAxisRaw("Horisontell"); // d nyckel ändrar värde till 1, en nyckel ändrar värde till -1
float zMove = Ingång. GetAxisRaw("Vertikal"); // w-tangenten ändrar värde till 1, s-tangenten ändrar värde till -1
rb.velocity = new Vector3(xMove, rb.velocity.y, zMove) * hastighet; // Skapar hastighet i riktning som är lika med tangenttryckning (WASD). rb.velocity.y hanterar fallande + hopp genom att sätta hastigheten till y.

}
}

Notera: Om du tycker att din karaktär floppar mer än något annat, se till att låsa spelarens rotation i Inspektör.

Lär dig och gör mer i enhet

Nu när du vet hur man programmerar spelarrörelser i Unity med komponenterna Rigidbody och Collider, vad kommer du att lära dig härnäst? Att utöka din rörelsekontroller för att lägga till saker som glidning, dubbelhoppning och mer skulle kanske visa sig vara underhållande och engagerande.

Unity Learn är proppfull av intressanta ämnen för att förbättra din spelutvecklingsfärdighet. Vi tror att en av de viktigaste faktorerna för att utöka dina kunskaper om programmering är att lära dig något nytt varje dag. Håll dig nyfiken och hacka gärna!

Unity Learn är det enklaste sättet att bemästra spelutveckling

Vill du börja utveckla dina egna spel? Unity Learn är det bästa och enklaste sättet att lära sig och bemästra det du behöver veta.

Läs Nästa

Dela med sigTweetE-post
Relaterade ämnen
  • Programmering
  • Spelutveckling
  • Enhet
  • Programmering
Om författaren
Marcus Mears III (30 artiklar publicerade)

Marcus är frilansande teknikjournalist och juniorredaktör för programmering på MUO. Han är en livslång lärande, hobbyutvecklare och novellförfattare med 3+ års erfarenhet av att utveckla prosa som håller läsarna informerade.

Mer från Marcus Mears III

Prenumerera på vårt nyhetsbrev

Gå med i vårt nyhetsbrev för tekniska tips, recensioner, gratis e-böcker och exklusiva erbjudanden!

Klicka här för att prenumerera