Er du ny i Unity? Ønsker du å lære hvordan du tar innspill fra spillere og flytter karakterer rundt på skjermen? Vi har laget denne guiden for å vise frem tre forskjellige måter du kan kontrollere spillerbevegelser på i Unity.
Enten du er ny på koding eller har litt erfaring under beltet, vil denne C#-opplæringen få deg på beina, og karakterene dine på deres.
La oss komme i gang.
Player Movement in Unity: Samle innspill
Først må du vite hvordan du fanger inn input fra brukeren og transformerer dem til bevegelse i spillet. Unity gjør dette ganske enkelt så lenge du vet hvor du skal lete.
Med Unity åpen, klikk på Redigere på den øverste verktøylinjen. Velg nå Prosjektinnstillinger. Velg fra listen til venstre Input Manager. Plukke ut Økser, fyller ut listen over inndataverdier. Du vil se på Horisontal og Vertikal for grunnleggende bevegelse.
Du vil bruke disse aksene sammen med Inndata. GetAxisRaw(); for grunnleggende bevegelse i neste avsnitt.
Spillerbevegelse i enhet ved hjelp av en rigidbody og kolliderer
Nå som du kjenner navnene på aksene, kan du bruke dem til å kontrollere spillerens bevegelser.
I Unity-prosjektet ditt Hierarki se, høyreklikk og velg 3D-objekt > Kapsel å skape det du vil gi bevegelse til. Sørg for å bruke samme taktikk for å lage et underlag Fly for kapselen å stå på.
Sørg for å tilbakestille Forvandle verdien av begge objektene, og flytt kapselen din slik at den står på flyet. Gi kapselen nytt navn til noe sånt som "Player" for enkel identifikasjon.
I slekt: De 5 Unity Game Development Languages: Hvilket bør du lære?
Klikk på Spiller objekt og, i Inspektør visning, rull ned til Legg til komponent. Legg til en Stiv kropp, og legg deretter til en annen komponent som en Capsule Collider denne gangen. Du trenger disse komponentene for å legge til fysikk, og dermed bevegelse, til din Spiller.
Deretter høyreklikker du i din Skript mappe og Skape en ny C#-skript. Gi dette skriptet et navn i stil med "PlayerMovement". Hvis du planlegger å legge til flere typer bevegelser for forskjellige karakterer eller kontrollertyper, vil du lage mange forskjellige skript for hver type bevegelse. Foreløpig vil vi fokusere på det grunnleggende og bruke ett skript.
Se også: Hva er modulær programmering i Unity og hvorfor er det viktig?
Dobbeltklikk på skriptet for å åpne det. Du vil bli møtt med et standard Unity-skript:
bruker System. Samlinger;
bruker System. Samlinger. Generisk;
bruker UnityEngine;
offentlig klasse PlayerMovement: MonoBehaviour
{
// Start kalles før den første rammeoppdateringen
void Start()
{}
// Oppdatering kalles én gang per frame
void Update()
{
}
}
Du kan slette bruker System. Samlinger; og ved hjelp avSystem. Samlinger. Generisk; siden de ikke er nødvendige for dette skriptet.
Med det ute av veien, fokuser på
offentlig klasse PlayerMovement: MonoBehaviour {
for nå. På innsiden av den krøllete åpningen lager du en offentlig flyte variabel navngitt hastighet eller noe lignende. Dette hastighet variabel er en multiplikator som vil kontrollere hvor raskt vår Spiller beveger seg etter litt mer programmering. For nå, sett hastighet lik noe sånt som 10f.
Du må også gi Unity at det er en Rigidbody å manipulere i dette skriptet. Dette gjøres med nøkkelordet Stiv kropp og et variabelnavn – vi velger rb.
offentlig klasse PlayerMovement: MonoBehaviour
{
offentlig flytehastighet = 10f; //Styrer hastighetsmultiplikator
Rigidbody rb; //Forteller skriptet at det er en rigidbody, vi kan bruke variabel rb for å referere til den i ytterligere skript
Det er alt du trenger å legge til i denne delen. Nå, gå videre til void Start(). Når du starter spillet, må du angi rb variabel lik Stiv kropp på Spiller som så:
void Start()
{
rb = GetComponent(); //rb er lik den stive kroppen på spilleren
}
Nå, ta en titt på void Update() funksjon. Dette er funksjonen du vil bruke for hele tiden å hente inn input fra spillernes tastaturer, kontrollere osv. Husk når du sjekket Prosjektinnstillinger til Inndataakser? Du vil bruke dem her.
void Update()
{
float xMove = Inngang. GetAxisRaw("Horisontal"); // d-tast endrer verdi til 1, en nøkkel endrer verdi til -1
float zMove = Inngang. GetAxisRaw("Vertikal"); // w-tast endrer verdi til 1, s-tast endrer verdi til -1
rb.velocity = ny Vector3(xMove, rb.velocity.y, zMove) * hastighet; // Skaper hastighet i retning av verdi lik tastetrykk (WASD). rb.velocity.y omhandler fall + hopp ved å sette hastigheten til y.
}
Ikke bekymre deg hvis du føler deg overveldet når du hopper inn koden; vi forklarer det trinn for trinn. Først lager du en flyte variabel med et navn som xFlytt, og sett den lik Inndata. GetAxisRaw("Horisontal");
Inndata. GetAxisRaw(); er Unitys måte å ta opp spillerinnganger fra Økser du fant i Prosjektinnstillinger. Du kan lese mer om det i Unitys offisielle dokumentasjon. "Horisontal" kommer fra Horisontal akse navn i Unity. Denne aksen kontrollerer venstre og høyre bevegelse med "a" og "d" tastene.
Som du sikkert kan gjette nå, float zMove = Inngang. GetAxisRaw("Vertikal");
gjør det samme, men for "w" og "s" tastene.
I slekt: De beste Unity 3D-veiledningene for nybegynnere
Deretter legger du det hastighet variabelen du opprettet i spill og fullfør den siste brikken i puslespillet for spillerbevegelse i Unity.
rb.velocity = ny Vector3(xMove, rb.velocity.y, zMove) * hastighet; // Skaper hastighet i retning av verdi lik tastetrykk (WASD). rb.velocity.y omhandler fall + hopp ved å sette hastigheten til y.
Gå tilbake til Unity's Inspektør visning for Spiller gjenstand. Ta en titt på Stiv kropp-under Info, vil du se en verdi Hastighet. Dette er verdien du målretter mot rb.hastighet.
ny Vector3(xMove, rb.velocity.y, zMove) * hastighet, oppretter en ny vektor med de oppgitte x-, y- og z-verdiene, og multipliserer deretter verdien til vektoren med hastighet.
Sørg for å dra Spillerbevegelse skript på Spiller objekt i Unity, og det er det! Til sammen har du et fungerende C#-skript som tar innspill fra spilleren og forvandler dem til karakterbevegelser i Unity.
Her er den ferdige koden:
bruker UnityEngine;
offentlig klasse PlayerMovement: MonoBehaviour
{
offentlig flytehastighet = 10f; //Styrer hastighetsmultiplikator
Rigidbody rb; //Forteller skriptet at det er en rigidbody, vi kan bruke variabel rb for å referere til den i ytterligere skript// Start kalles før den første rammeoppdateringen
void Start()
{
rb = GetComponent(); //rb er lik den stive kroppen på spilleren
}// Oppdatering kalles én gang per frame
void Update()
{
float xMove = Inngang. GetAxisRaw("Horisontal"); // d-tast endrer verdi til 1, en nøkkel endrer verdi til -1
float zMove = Inngang. GetAxisRaw("Vertikal"); // w-tast endrer verdi til 1, s-tast endrer verdi til -1
rb.velocity = ny Vector3(xMove, rb.velocity.y, zMove) * hastighet; // Skaper hastighet i retning av verdi lik tastetrykk (WASD). rb.velocity.y omhandler fall + hopp ved å sette hastigheten til y.
}
}
Merk: Hvis du finner ut at karakteren din flopper mer enn noe annet, sørg for å låse spillerens rotasjon i Inspektør.
Lær og lag mer i enhet
Nå som du vet hvordan du programmerer spillerbevegelser i Unity med Rigidbody- og Collider-komponenter, hva vil du lære videre? Kanskje utvidelse av bevegelseskontrolleren din for å legge til ting som gliding, dobbelthopping og mer vil vise seg å være underholdende og engasjerende.
Unity Learn er stappfull av interessante emner for å fremme ferdighetene dine i spillutvikling. Vi tror at en av de viktigste faktorene for å utvide kunnskapen din om programmering er å lære noe nytt hver dag. Vær nysgjerrig og ha det bra med hacking!
Vil du begynne å utvikle dine egne spill? Unity Learn er den beste og enkleste måten å lære og mestre det du trenger å vite.
Les Neste
- Programmering
- Spillutvikling
- Enhet
- Programmering
Marcus er frilans tech-journalist og juniorredaktør for programmering ved MUO. Han er en livslang lærer, hobbyutvikler og novelleforfatter med 3+ års erfaring med å utvikle prosa som holder leserne orientert.
Abonner på vårt nyhetsbrev
Bli med i vårt nyhetsbrev for tekniske tips, anmeldelser, gratis e-bøker og eksklusive tilbud!
Klikk her for å abonnere