Lesere som deg er med på å støtte MUO. Når du foretar et kjøp ved å bruke lenker på nettstedet vårt, kan vi tjene en tilknyttet provisjon. Les mer.

En karakterkontroller kan hjelpe deg med å implementere enkel bevegelsesfysikk i spillet ditt.

Du kan nærme deg Unity3D-karakterkontrollere fra flere vinkler. Hvis du bruker et bibliotek med kraftige klasser og funksjoner, kan det å lage en fysikkbasert karakterkontroller være et morsomt sted å starte spillutviklingen din.

Trinn 1: Lag en scene med spiller- og terrengobjekter

Når Unity er åpen, og du har opprettet et nytt prosjekt, kan du begynne med å legge til et par objekter til scenen din. Du kan lage disse objektene i hvilken som helst rekkefølge du vil, men pass på at du bruker de riktige innstillingene. Selv om dette prosjektet er grunnleggende, er det en fin måte å gjøre det på komme i gang med Unity.

Et 3D-planobjekt for terreng

Det første objektet å legge til scenen din er et fly. Høyreklikk inne i hierarki-ruten, hold musepekeren over

3D-objekt, og velg Fly fra listen. Du kan justere størrelsen på flyet for å gi et større testområde, men du trenger ikke gjøre noe annet med det.

En kubeobjektspillermodell

Deretter er det på tide å legge til en kube til scenen for å fungere som en spillermodell. Høyreklikk inne i hierarki-ruten, hold musepekeren over 3D-objekt, og velg Kube fra rullegardinmenyen. Plasser den nye kuben slik at den sitter over flyet du også har lagt til. Du må også legge til en rigidbody-komponent for å gjøre kuben til et fysikkobjekt.

Velg kuben og gå til inspektøren. Klikk på Legg til komponent nederst i ruten, søk etter rigidbody, og velg Stiv kropp fra listen når den vises. Kryss av Bruk Gravity kryss av i boksen og la resten av innstillingene være som de er.

Du kan finne gratis Unity-eiendeler online for å piffe opp prosjektet ditt.

Et tredjepersonskamera

Scenen din skal allerede ha et kamera du kan bruke som tredjepersonskamera. Plasser kameraet slik at det sitter i en komfortabel tredjepersonsposisjon over kuben. Gå til hierarki-ruten før du drar og slipper kameraet på kuben for å opprette en foreldre-barn-relasjon. Kameraet vil automatisk følge kuben din når dette er gjort.

En rask test

Mens scenen din ikke har noen kode ennå, kan du teste arbeidet du har gjort så langt. Klikk på Spille knappen øverst på skjermen for å laste spillet ditt. Du bør se kuben falle og lande på toppen av flyet, og kameraet skal følge kuben når den faller.

Trinn 2: Sett opp en C#-fil

Nå er det på tide å lage en C#-fil slik at du kan begynne å programmere noen bevegelser. Gå til Prosjekt-delen, høyreklikk, hold musepekeren over Opprett og velg Mappe fra listen. Gi mappen et navn Scripts eller noe lignende.

Naviger i den nye mappen og gjenta prosessen, men velg C# Script fra listen. Du kan gi denne filen et hvilket som helst navn, men dette vil også være navnet på hovedfunksjonen i den. Sørg for at din nye C# ser slik ut.

ved hjelp av System. Samlinger;
ved hjelp av System. Samlinger. Generisk;
ved hjelp av UnityEngine;

offentligklasseCharacter_Control: MonoBehaviour {
tomromStart() {
}

tomromOppdater() {
}
}

Trinn 3: Bruk C# for å lage bevegelse fremover og bakover med hastighet

Før du legger til funksjonene i skriptfilen, erklærer du noen offentlige variabler. Først ut er en Rigidbody for å lagre spillermodellen. Erklær også en flottør for å holde styr på bevegelseshastigheten. Disse variablene går i hovedklassen, utenfor alle funksjoner.

offentlig Rigidbody rigidbody;
offentligflyte hastighet;

Deretter er det på tide å legge til en enkelt kodelinje til Start-funksjonen. Dette bruker en GetComponent-deklarasjon for å tilordne kubens rigidbody-komponent til rigidbody-variabelen du opprettet.

tomromStart() {
rigidbody = GetComponent < Rigidbody > ();
}

Nå kan du legge til en kode som får spillermodellen din i bevegelse. Denne koden er fin og enkel; du trenger bare to if-utsagn, en for å bevege seg fremover og en for å gå bakover. Du kan bruke Input. GetKey for å bestemme når en tast trykkes. I dette tilfellet ser du etter trykk på W- og S-tastene.

Ved å trykke på en av disse tastene tilfører du en kraft til kubens rigidbody ved å bruke rigidbody. AddForce. Du kan beregne retningen og hastigheten til den tilførte kraften ved å multiplisere dens Z-akseposisjon (transform.forward) med hastighetsvariabelen. Det er ingen transform.backward-klasse du kan bruke for bakoverbevegelse, men dette kan oppnås ved å multiplisere transform.forward med -1.

hvis (Inndata. GetKey("w")) {
stiv kropp. AddForce (transform.forward * hastighet);
}

hvis (Inndata. GetKey("s")) {
stiv kropp. AddForce((transform.forward * -1) * hastighet);
}

Lagre C#-filen og naviger tilbake til Unity. Finn skriptet inne i Prosjekt-ruten og dra og slipp det på tegnmodellen Cube inne i hierarkiet for å tilordne skriptet til det objektet. Når du velger kuben, bør du se skriptet som en komponent i Inspektør-ruten. Klikk inne i rigidbody-variabelboksen og velg kubens rigidbody.

Du kan nå bruke Play-knappen for å starte spillet og teste ut koden din. Men vent! Det er et problem; kuben din kommer til å rulle i stedet for å gå rett frem. Gå tilbake til kubens inspektør, finn Rigidbody-komponenten, og kryss av i boksene for å fryse rotasjon på X- og Z-aksen før du starter spillet igjen. Nå skal det fungere.

Trinn 4: Bruk C# for å lage venstre- og høyresving med dreiemoment

I motsetning til å bevege seg bakover og fremover, krever det å snu Cube-spillermodellen en kraft som kalles dreiemoment. Du trenger en annen variabel for dette: en offentlig flottør for å tildele en dreiemomentverdi.

offentligflyte dreiemoment;

Koden for å svinge til venstre og høyre i dette skriptet er veldig lik den som brukes til å gå fremover og bakover også. Det er en hvis uttalelse for hver retning som ser etter trykk på enten D-tasten (høyre sving) eller A-tasten (venstresving).

Det første trinnet i hver if-setning er å bestemme retningen til svingen ved hjelp av Input. GetAxis-metoden og tilordne resultatet til en flytevariabel. Etter dette, bruk rigidbody. Legg til Torque for å bruke rotasjonskraft på Cube-karaktermodellen ved å multiplisere dreiemomentet, dreiemomentet og Z-aksen til kuben.

hvis (Inndata. GetKey("d")) {
flyte tur = Inngang. GetAxis("Horisontal");
stiv kropp. AddTorque (transform.up * dreiemoment * turn);
}

hvis (Inndata. GetKey("en")) {
flyte tur = Inngang. GetAxis("Horisontal");
stiv kropp. AddTorque (transform.up * dreiemoment * turn);
}

Lagre koden din og gå tilbake til Unity for å teste den ut. Du kan justere hastigheten og opprampetiden for spillermodellrotasjonen din ved å velge kuben og redigere den stive kroppens masse-, drag- og dreiemomentvariabler i skriptet ditt. Dette eksempelprosjektet setter seg på 1 masse, 1 drag og 2 dreiemoment.

Trinn 5: Bruk C# for å programmere hopping

Som det siste elementet i denne Unity-karakterkontrolleren er det på tide å lage hoppet ditt. Å lage et hopp er mer komplekst enn de andre grunnleggende kontrollene du har jobbet med, gitt at et hopp må ha en begrenset høyde. Start med å legge til en privat boolsk variabel for å spore om spilleren hopper eller ikke.

privatbool erhopping = falsk;

Denne variabelen vil ikke gjøre noe uten en uttalelse for å teste den. I dette tilfellet vil en grunnleggende if-setning for å sjekke om variabelen er usann gjøre susen. Å legge den samme betingelsen til den andre bevegelsen hvis uttalelser vil stoppe spilleren fra å bevege seg under hopp.

hvis (!isJumping) {
}

Å legge den samme betingelsen til den andre bevegelsen hvis uttalelser vil stoppe spilleren fra å bevege seg under hopp.

hvis (Inndata. GetKey("w") && !isJumping) {
stiv kropp. AddForce (transform.forward * hastighet);
}

Innenfor !isJumping if-setningen trenger du en annen if-setning, denne gangen for å se etter et tastetrykk på hoppknappen. Å sette isJumping-variabelen til true er den første tingen å gjøre i denne if-setningen, etterfulgt av å lage en rigidbody.angularVelocity-deklarasjon for å fjerne kreftene som for øyeblikket påføres kuben.

Nå kan du bruke rigidbody. AddForce-erklæring for å legge til kraft til kuben på dens Z-akse, og skape den oppadgående bevegelsen til et hopp. Til slutt er det på tide å bruke en påkallingserklæring for å kalle en annen funksjon etter 0,8 sekunder.

hvis (!isJumping) {
hvis (Inndata. GetKeyDown("rom")) {
erhopping = ekte;
stiv kropp. AddForce (transform.up * hastighet * 120);
rigidbody.angularVelocity = Vector3.zero;
Påkalle("Move_Setter", 0.8 f);
}
}

Denne funksjonen setter isJumping-variabelen tilbake til usann slik at bevegelse/hopping er mulig igjen, og 0,8 sekunders forsinkelse stopper den fra å utløses for tidlig.

tomromMove_Setter() {
erhopping = falsk;
}

Trinn 6: Test din tegnkontrollerkode

Lagre filen og gå tilbake til Unity for å teste koden du har skrevet. Som de fleste kompilatorer gir Unity informasjon om feil og andre problemer med koden din for å gjøre det lettere å se hva du måtte endre. Du kan se hele koden for dette prosjektet på vår GitHub side.

Opprette enhetskarakterkontrollere

Du kan velge mellom en rekke forskjellige tilnærminger når du lager en karakterkontroller i Unity. Å bruke fysikk er ett alternativ, men du kan også bruke det innebygde karakterkontrollsystemet hvis du vil.

Å utforske forskjellige alternativer som dette er en fin måte å lære om verktøy som Unity.