Er du ny i Unity? Ønsker du at lære, hvordan du tager input fra spillere og flytter karakterer rundt på skærmen? Vi har lavet denne guide for at vise tre forskellige måder, hvorpå du kan kontrollere spillerbevægelser i Unity.
Uanset om du er ny inden for kodning eller har lidt erfaring bag dig, vil denne C#-tutorial få dig på fode og dine karakterer på deres.
Lad os komme igang.
Spillerbevægelse i enhed: Indsamling af input
Først og fremmest skal du vide, hvordan du fanger input fra brugeren og transformerer dem til bevægelse i spillet. Unity gør dette ret nemt, så længe du ved, hvor du skal lede.
Med Unity åben, klik på Redigere på den øverste værktøjslinje. Vælg nu Projektindstillinger. Vælg fra listen til venstre Input manager. Vælg Økser, udfylder listen over inputværdier. Du vil gerne se på Vandret og Lodret til grundlæggende bevægelse.
Du vil bruge disse akser sammen med Input. GetAxisRaw(); for grundlæggende bevægelse i næste afsnit.
Spillerbevægelse i enhed ved hjælp af en stiv krop og kolliderer
Nu hvor du kender navnene på akserne, kan du bruge dem til at styre spillerens bevægelser.
I dit Unity-projekt Hierarki se, højreklik og vælg 3D-objekt > Kapsel at skabe det, du vil give bevægelse til. Sørg for at bruge den samme taktik til at skabe en jord Fly for din kapsel at stå på.
Sørg for at nulstille Transform værdien af begge objekter, og flyt din kapsel, så den står på flyet. Omdøb din kapsel til noget som "Player" for nem identifikation.
Relaterede: De 5 Unity-spiludviklingssprog: Hvilket skal du lære?
Klik på Spiller objekt og i Inspektør se, rul ned til Tilføj komponent. Tilføj en Rigidbody, og tilføj derefter en anden komponent som en Capsule Collider denne gang. Du skal bruge disse komponenter for at tilføje fysik, og dermed bevægelse, til din Spiller.
Højreklik derefter i din Scripts mappe og skab en ny C# script. Navngiv dette script noget i stil med "PlayerMovement". Hvis du planlægger at tilføje flere typer bevægelser til forskellige karakterer eller controllertyper, vil du gerne oprette mange forskellige scripts for hver type bevægelse. Indtil videre fokuserer vi på det grundlæggende og bruger ét script.
Se også: Hvad er modulær programmering i Unity, og hvorfor er det vigtigt?
Dobbeltklik på dit script for at åbne det. Du vil blive mødt med et standard Unity-script:
ved hjælp af System. Samlinger;
ved hjælp af System. Samlinger. Generisk;
ved hjælp af UnityEngine;
offentlig klasse PlayerMovement: MonoBehaviour
{
// Start kaldes før den første rammeopdatering
void Start()
{}
// Opdatering kaldes én gang pr. frame
ugyldig opdatering()
{
}
}
Du kan slette ved hjælp af System. Samlinger; og ved brug afSystem. Samlinger. Generisk; da de ikke er nødvendige til dette script.
Med det af vejen, fokus på
offentlig klasse PlayerMovement: MonoBehaviour {
for nu. Indersiden af den åbne krøllede bøjle, lav en offentlig flyder variabel navngivet hastighed eller noget lignende. Dette hastighed variabel er en multiplikator, der vil kontrollere, hvor hurtigt vores Spiller bevæger sig efter noget mere programmering. Indstil nu hastighed lig med noget lignende 10f.
Du skal også lade Unity, at der er en Rigidbody at manipulere i dette script. Dette gøres med søgeordet Rigidbody og et variabelnavn – vi vælger rb.
offentlig klasse PlayerMovement: MonoBehaviour
{
offentlig flydehastighed = 10f; //Styrer hastighedsmultiplikator
Rigidbody rb; //Fortæller script der er en rigidbody, vi kan bruge variabel rb til at referere til den i yderligere script
Det er alt, du behøver at tilføje i dette afsnit. Gå nu videre til void Start(). Når du starter spillet, skal du indstille rb variabel lig med Rigidbody på den Spiller ligesom:
void Start()
{
rb = GetComponent(); //rb er lig med den stive krop på afspilleren
}
Tag nu et kig på ugyldig opdatering() fungere. Dette er den funktion, du vil bruge til konstant at få fat i input fra spillernes keyboards, controllere osv. Husk, hvornår du tjekkede Projektindstillinger til Input akser? Du skal bruge dem her.
ugyldig opdatering()
{
float xMove = Input. GetAxisRaw("Horizontal"); // d-tast ændrer værdi til 1, en nøgle ændrer værdi til -1
float zMove = Input. GetAxisRaw("Lodret"); // w-tast ændrer værdi til 1, s-tast ændrer værdi til -1
rb.velocity = ny Vector3(xMove, rb.velocity.y, zMove) * hastighed; // Skaber hastighed i retning af værdi svarende til tastetryk (WASD). rb.velocity.y omhandler fald + hop ved at sætte hastigheden til y.
}
Bare rolig, hvis du føler dig overvældet ved springet i koden; vi forklarer det trin for trin. Først skal du oprette en flyde variabel med et navn som xFlyt, og sæt den lig med Input. GetAxisRaw("Horizontal");
Input. GetAxisRaw(); er Unitys måde at optage afspillerens input fra Økser du fandt i Projektindstillinger. Du kan læse mere om det i Unitys officielle dokumentation. "Vandret" kommer fra Vandret akse navn i Enhed. Denne akse styrer venstre og højre bevægelse med "a" og "d" tasterne.
Som du sikkert kan gætte nu, float zMove = Input. GetAxisRaw("Lodret");
gør det samme, men for tasterne "w" og "s".
Relaterede: De bedste Unity 3D-tutorials for begyndere
Dernæst sætter du det hastighed variabel, du har oprettet i spil, og fuldfør den sidste brik i puslespillet for spillerbevægelse i Unity.
rb.velocity = ny Vector3(xMove, rb.velocity.y, zMove) * hastighed; // Skaber hastighed i retning af værdi svarende til tastetryk (WASD). rb.velocity.y omhandler fald + hop ved at sætte hastigheden til y.
Gå tilbage til Unity's Inspektør udsigt til Spiller objekt. Tag et kig på Rigidbody-under Info, vil du se en værdi Hastighed. Dette er den værdi, du målretter mod rb.hastighed.
ny Vector3(xMove, rb.velocity.y, zMove) * hastighed, opretter en ny vektor med de angivne x-, y- og z-værdier og multiplicerer derefter vektorens værdi med hastighed.
Sørg for at trække Spillerbevægelse script på Spiller objekt i Unity, og det er det! Alt i alt har du et fungerende C#-script, der tager input fra spilleren og transformerer dem til karakterbevægelser i Unity.
Her er den færdige kode:
ved hjælp af UnityEngine;
offentlig klasse PlayerMovement: MonoBehaviour
{
offentlig flydehastighed = 10f; //Styrer hastighedsmultiplikator
Rigidbody rb; //Fortæller script der er en rigidbody, vi kan bruge variabel rb til at referere til den i yderligere script// Start kaldes før den første rammeopdatering
void Start()
{
rb = GetComponent(); //rb er lig med den stive krop på afspilleren
}// Opdatering kaldes én gang pr. frame
ugyldig opdatering()
{
float xMove = Input. GetAxisRaw("Horizontal"); // d-tast ændrer værdi til 1, en nøgle ændrer værdi til -1
float zMove = Input. GetAxisRaw("Lodret"); // w-tast ændrer værdi til 1, s-tast ændrer værdi til -1
rb.velocity = ny Vector3(xMove, rb.velocity.y, zMove) * hastighed; // Skaber hastighed i retning af værdi svarende til tastetryk (WASD). rb.velocity.y omhandler fald + hop ved at sætte hastigheden til y.
}
}
Bemærk: Hvis du oplever, at din karakter flopper mere end noget andet, skal du sørge for at låse spillerens rotation i Inspektør.
Lær og skab mere i enhed
Nu hvor du ved, hvordan du programmerer spillerbevægelser i Unity med Rigidbody- og Collider-komponenter, hvad vil du så lære? Måske ville det vise sig underholdende og engagerende at udvide din bevægelsescontroller til at tilføje ting som glidning, dobbeltspring og mere.
Unity Learn er spækket med interessante emner til at fremme dine spiludviklingsfærdigheder. Vi mener, at en af de vigtigste faktorer for at udvide din viden om programmering er at lære noget nyt hver dag. Bliv nysgerrig og glad for hacking!
Vil du begynde at udvikle dine egne spil? Unity Learn er den bedste og nemmeste måde at lære og mestre det, du har brug for at vide.
Læs Næste
- Programmering
- Spiludvikling
- Enhed
- Programmering
Marcus er freelance tech-journalist og juniorredaktør for programmering på MUO. Han er en livslang lærende, hobbyist frontend-udvikler og novelleforfatter med 3+ års erfaring med at udvikle prosa, der holder læserne orienteret.
Abonner på vores nyhedsbrev
Tilmeld dig vores nyhedsbrev for tekniske tips, anmeldelser, gratis e-bøger og eksklusive tilbud!
Klik her for at abonnere