Læsere som dig hjælper med at støtte MUO. Når du foretager et køb ved hjælp af links på vores websted, kan vi optjene en affiliate-kommission. Læs mere.

En karaktercontroller kan hjælpe dig med at implementere simpel bevægelsesfysik i dit spil.

Du kan nærme dig Unity3D-karaktercontrollere fra flere vinkler. Hvis du bruger et bibliotek med kraftfulde klasser og funktioner, kan oprettelse af en fysikbaseret karaktercontroller være et sjovt sted at starte din spiludvikling.

Trin 1: Opret en scene med spiller- og terrænobjekter

Når Unity er åben, og du har oprettet et nyt projekt, kan du starte med at tilføje et par objekter til din scene. Du kan oprette disse objekter i den rækkefølge, du ønsker, men vær omhyggelig med at sikre dig, at du bruger de korrekte indstillinger. Selvom dette projekt er grundlæggende, er det en fantastisk måde at komme i gang med Unity.

Et 3D-planobjekt til terræn

Det første objekt at tilføje til din scene er et fly. Højreklik inde i hierarkiruden, hold musemarkøren over

instagram viewer
3D objekt, og vælg Fly fra listen. Du kan justere størrelsen på flyet for at give et større testområde, men du behøver ikke gøre andet ved det.

En Cube Object Player Model

Dernæst er det tid til at tilføje en terning til scenen for at fungere som spillermodel. Højreklik inde i hierarkiruden, hold musemarkøren over 3D objekt, og vælg terning fra rullemenuen. Placer den nye terning, så den sidder over det fly, du også har tilføjet. Du skal også tilføje en rigidbody-komponent for at gøre kuben til et fysikobjekt.

Vælg terningen og gå til Inspektøren. Klik på Tilføj komponent i bunden af ​​ruden, søg efter rigidbody, og vælg Rigidbody fra listen, når den vises. Sæt kryds ved Brug Gravity afkrydsningsfeltet og lad resten af ​​indstillingerne være som de er.

Du kan finde gratis Unity-aktiver online for at pifte dit projekt op.

Et tredjepersons kamera

Din scene burde allerede have et kamera, du kan bruge som dit tredjepersonskamera. Placer kameraet, så det sidder i en behagelig tredjepersonsposition over din terning. Gå til hierarkiruden, før du trækker og slipper kameraet på kuben for at skabe en forældre-barn-relation. Kameraet vil automatisk følge din terning, når dette er gjort.

En hurtig test

Selvom din scene endnu ikke har nogen kode, kan du teste det arbejde, du har udført indtil videre. Klik på Spil knappen øverst på skærmen for at indlæse dit spil. Du bør se kuben falde og lande på toppen af ​​flyet, og kameraet skal følge kuben, når den falder.

Trin 2: Opsæt en C#-fil

Nu er det tid til at oprette en C#-fil, så du kan begynde at programmere nogle bevægelser. Gå til sektionen Projekt, højreklik, hold markøren over Opret, og vælg Mappe fra listen. Navngiv mappen Scripts eller noget lignende.

Naviger i din nye mappe og gentag processen, men vælg C# Script fra listen. Du kan give denne fil et hvilket som helst navn, men dette vil også være navnet på hovedfunktionen i den. Sørg for, at din nye C# ser sådan ud.

ved brug af System. Samlinger;
ved brug af System. Samlinger. Generisk;
ved brug af UnityEngine;

offentligklasseCharacter_Control: Monoadfærd {
ugyldigStart() {
}

ugyldigOpdatering() {
}
}

Trin 3: Brug C# til at skabe fremadgående og bagudgående bevægelse med hastighed

Inden du tilføjer funktionerne i din scriptfil, skal du erklære nogle offentlige variabler. Først op er en Rigidbody til at opbevare afspillermodellen. Erklær også en flyder for at holde styr på bevægelseshastigheden. Disse variable går i hovedklassen uden for alle funktioner.

offentlig Rigidbody rigidbody;
offentligflyde fart;

Dernæst er det tid til at tilføje en enkelt kodelinje til startfunktionen. Dette bruger en GetComponent-erklæring til at tildele kubens rigidbody-komponent til den rigidbody-variabel, du oprettede.

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

Nu kan du tilføje noget kode, der får din afspillermodel i gang. Denne kode er fin og enkel; du skal bare bruge to if-udsagn, en til fremadgående bevægelse og en til at flytte tilbage. Du kan bruge Input. GetKey til at bestemme, hvornår der trykkes på en tast. I dette tilfælde leder du efter tryk på W- og S-tasterne.

Et tryk på en af ​​disse taster tilføjer en kraft til terningens rigidbody ved hjælp af rigidbody. AddForce. Du kan beregne retningen og hastigheden af ​​den tilføjede kraft ved at gange dens Z-akseposition (transform.forward) med hastighedsvariablen. Der er ingen transform.backward-klasse, som du kan bruge til baglæns bevægelse, men dette kan opnås ved at gange transform.forward med -1.

hvis (Input. GetKey("w")) {
stiv krop. AddForce (transform.forward * hastighed);
}

hvis (Input. GetKey("s")) {
stiv krop. AddForce((transform.forward * -1) * fart);
}

Gem C#-filen og naviger tilbage til Unity. Find scriptet inde i projektruden, og træk og slip det på tegnmodellen Cube inde i hierarkiet for at tildele scriptet til det objekt. Når du vælger terningen, skal du se scriptet som en komponent i Inspector-ruden. Klik inde i rigidbody-variablen, og vælg din ternings rigidbody.

Du kan nu bruge Play-knappen til at starte spillet og teste din kode. Men vent! Der er et problem; din terning vil rulle i stedet for at bevæge sig lige fremad. Gå tilbage til terningens inspektør, find Rigidbody-komponenten, og sæt kryds i boksene til Freeze Rotation på X- og Z-aksen, før du starter spillet igen. Nu skulle det virke.

Trin 4: Brug C# til at skabe venstre- og højredrejning med moment

I modsætning til at bevæge sig frem og tilbage, kræver det en kraft, der kaldes moment, at dreje din Cube-afspillermodel. Du har brug for en anden variabel til dette: en offentlig flyder til at tildele en momentværdi.

offentligflyde drejningsmoment;

Koden til at dreje til venstre og højre i dette script er meget lig den, der også bruges til at bevæge sig frem og tilbage. Der er en hvis sætning for hver retning, der ser efter tryk på enten D-tasten (højredrejning) eller A-tasten (venstresving).

Det første trin i hver if-sætning er at bestemme retningen af ​​svinget ved hjælp af input. GetAxis-metoden og tildel resultatet til en flydende variabel. Efter dette, brug rigidbody. Tilføj drejningsmoment for at anvende rotationskraft på terningmodellen ved at gange terningens drejningsmoment, drejning og Z-akse.

hvis (Input. GetKey("d")) {
flyde drej = Indgang. GetAxis("Vandret");
stiv krop. TilføjTorque (transform.up * moment * drejning);
}

hvis (Input. GetKey("en")) {
flyde drej = Indgang. GetAxis("Vandret");
stiv krop. TilføjTorque (transform.up * moment * drejning);
}

Gem din kode og gå tilbage til Unity for at teste den. Du kan justere hastigheden og opstigningstiden for din afspillermodels rotation ved at vælge terningen og redigere den stive krops masse-, træk- og drejningsmoment-variabler i dit script. Dette eksempelprojekt afgør 1 masse, 1 træk og 2 moment.

Trin 5: Brug C# til at programmere spring

Som det sidste element i denne Unity-karaktercontroller er det tid til at skabe dit spring. At oprette et hop er mere komplekst end de andre grundlæggende kontroller, du har arbejdet på, i betragtning af at et hop skal have en begrænset højde. Start med at tilføje en privat boolesk variabel for at spore, om spilleren hopper eller ej.

privatbool er Jumping = falsk;

Denne variabel vil ikke gøre noget uden en erklæring for at teste den. I dette tilfælde vil en grundlæggende if-sætning for at kontrollere, om variablen er falsk, gøre det trick. Tilføjelse af samme betingelse til den anden bevægelse, hvis udsagn vil forhindre spilleren i at bevæge sig under hop.

hvis (!isJumping) {
}

Tilføjelse af samme betingelse til den anden bevægelse, hvis udsagn vil forhindre spilleren i at bevæge sig under hop.

hvis (Input. GetKey("w") && !isJumping) {
stiv krop. AddForce (transform.forward * hastighed);
}

Inden for !isJumping if-sætningen har du brug for en anden if-sætning, denne gang for at tjekke, om der er et tastetryk på jump-knappen. At indstille isJumping-variablen til sand er den første ting at gøre i denne if-sætning, efterfulgt af at lave en rigidbody.angularVelocity-erklæring for at fjerne de kræfter, der aktuelt påføres kuben.

Nu kan du bruge rigidbody. AddForce-erklæring for at tilføje kraft til kuben på dens Z-akse, hvilket skaber den opadgående bevægelse af et hop. Endelig er det tid til at bruge en invoke-erklæring til at kalde en anden funktion efter 0,8 sekunder.

hvis (!isJumping) {
hvis (Input. GetKeyDown("plads")) {
er Jumping = rigtigt;
stiv krop. AddForce (transform.up * hastighed * 120);
rigidbody.angularVelocity = Vector3.nul;
Påkald ("Move_Setter", 0.8 f);
}
}

Denne funktion indstiller isJumping-variablen tilbage til falsk, så bevægelse/spring er muligt igen, og forsinkelsen på 0,8 sekunder forhindrer den i at udløse for tidligt.

ugyldigFlyt_Setter() {
er Jumping = falsk;
}

Trin 6: Test din Character Controller-kode

Gem din fil, og gå tilbage til Unity for at teste den kode, du har skrevet. Som de fleste compilere giver Unity information om fejl og andre problemer med din kode for at gøre det nemmere at se, hvad du muligvis skal ændre. Du kan se den fulde kode for dette projekt på vores GitHub side.

Oprettelse af Unity Character-controllere

Du kan vælge mellem en række forskellige tilgange, når du opretter en karaktercontroller i Unity. At bruge fysik er en mulighed, men du kan også bruge det indbyggede karaktercontrollersystem, hvis du vil.

At udforske forskellige muligheder som dette er en fantastisk måde at lære om værktøjer som Unity.