Ben je nieuw bij Unity? Wil je leren hoe je input van spelers kunt krijgen en personages over het scherm kunt verplaatsen? We hebben deze gids gemaakt om drie verschillende manieren te laten zien waarop je de bewegingen van spelers in Unity kunt regelen.
Of je nu net begint met coderen of al wat ervaring hebt, deze C#-tutorial helpt je op de been en je personages op die van hen.
Laten we beginnen.
Spelersbeweging in eenheid: input verzamelen
Allereerst moet je weten hoe je input van de gebruiker kunt vastleggen en deze in de game kunt omzetten in beweging. Unity maakt dit vrij eenvoudig, zolang je maar weet waar je moet zoeken.
Met Unity geopend, klik op Bewerking in de bovenste werkbalk. Selecteer nu Projectinstellingen. Kies uit de lijst aan de linkerkant Invoerbeheer. Selecteer assen, waarmee de lijst met invoerwaarden wordt ingevuld. Je wilt kijken naar Horizontaal en Verticaal voor basisbewegingen.
Je gebruikt deze assen samen met Invoer. GetAxisRaw(); voor basisbewegingen in de volgende sectie.
Spelersbeweging in eenheid met behulp van een rigidbody en Collider
Nu u de namen van de assen kent, kunt u ze gebruiken om de bewegingen van de speler te besturen.
In je Unity-project Hiërarchie bekijken, klik met de rechtermuisknop en selecteer 3D-object > Capsule om te creëren waar je beweging aan schenkt. Zorg ervoor dat je dezelfde tactiek gebruikt om een grond te creëren Vlak voor uw Capsule om op te staan.
Zorg ervoor dat u de. reset Transformeren waarde van beide objecten, en verplaats je capsule zodat deze op het vliegtuig staat. Hernoem je capsule naar iets als "Player" voor gemakkelijke identificatie.
Verwant: De 5 Unity Game Development-talen: welke moet je leren?
Klik op de Speler object en, in de Inspecteur bekijken, scroll naar beneden naar Component toevoegen. Voeg een... toe Stijf lichaam, en voeg dan nog een component toe als a Capsule Collider deze keer. Je hebt deze componenten nodig om natuurkunde, en dus beweging, toe te voegen aan je Speler.
Klik vervolgens met de rechtermuisknop in uw Scripts map en Creëren een nieuwe C#-script. Noem dit script iets in de trant van "PlayerMovement". Als je van plan bent meerdere soorten beweging toe te voegen voor verschillende personages of controllertypes, moet je veel verschillende scripts maken voor elk type beweging. Voor nu concentreren we ons op de basis en gebruiken we één script.
Zie ook: Wat is modulair programmeren in eenheid en waarom is het belangrijk?
Dubbelklik op uw script om het te openen. U krijgt een standaard Unity-script te zien:
systeem gebruiken. Collecties;
systeem gebruiken. Collecties. Algemeen;
met behulp van UnityEngine;
openbare klasse PlayerMovement: MonoBehaviour
{
// Start wordt aangeroepen voor de eerste frame-update
ongeldig Begin()
{}
// Update wordt één keer per frame aangeroepen
ongeldige update()
{
}
}
U kunt verwijderen systeem gebruiken. Collecties; en gebruik makend vanSysteem. Collecties. Algemeen; omdat ze niet nodig zijn voor dit script.
Met dat uit de weg, focus op
openbare klasse PlayerMovement: MonoBehaviour {
voor nu. Maak aan de binnenkant van de openende accolade een openbare praalwagen variabele genaamd snelheid of iets dergelijks. Deze snelheid variabele is een vermenigvuldiger die bepaalt hoe snel onze Speler beweegt na wat meer programmering. Voor nu, stel snelheid gelijk aan iets als 10f.
Je moet Unity ook laten weten dat er een Rigidbody is om in dit script te manipuleren. Dit doe je met het trefwoord Stijf lichaam en een variabelenaam - we zullen kiezen rb.
openbare klasse PlayerMovement: MonoBehaviour
{
openbare vlottersnelheid = 10f; // Regelt de snelheidsvermenigvuldiger
Stijf lichaam rb; // Vertelt script dat er een rigidbody is, we kunnen variabele rb gebruiken om ernaar te verwijzen in verder script
Dat is alles wat u in deze sectie hoeft toe te voegen. Ga nu verder met ongeldig Begin(). Bij het starten van het spel moet je de rb variabele gelijk aan de Stijf lichaam op de Speler zoals zo:
ongeldig Begin()
{
rb = GetComponent(); //rb is gelijk aan de starbody op de speler
}
Kijk nu eens naar de ongeldige update() functie. Dit is de functie die u zult gebruiken om constant invoer van de toetsenborden, controllers, enz. Weet je nog toen je de. aanvinkte Projectinstellingen voor Invoerassen? Je zult ze hier gebruiken.
ongeldige update()
{
float xMove = Invoer. GetAxisRaw("Horizontaal"); // d-toets verandert de waarde in 1, een toets verandert de waarde in -1
float zMove = Invoer. GetAxisRaw("Verticaal"); // w-toets verandert waarde in 1, s-toets verandert waarde in -1
rb.velocity = nieuwe Vector3(xMove, rb.velocity.y, zMove) * snelheid; // Creëert snelheid in de richting van waarde gelijk aan toetsaanslag (WASD). rb.velocity.y behandelt vallen + springen door de snelheid in te stellen op y.
}
Maak je geen zorgen als je je overweldigd voelt door de sprong in de code; we leggen het je stap voor stap uit. Maak eerst een vlot variabele met een naam als xVerplaatsen, en stel het gelijk aan Invoer. GetAxisRaw("Horizontaal");
Invoer. GetAxisRaw(); is Unity's manier om spelerinvoer van de assen je vond in de Projectinstellingen. Je leest er meer over in Officiële documentatie van Unity. "Horizontaal" Komt van de Horizontale as naam in Eenheid. Deze as regelt de beweging naar links en rechts met de toetsen "a" en "d".
Zoals je nu waarschijnlijk wel kunt raden, float zMove = Invoer. GetAxisRaw("Verticaal");
doet hetzelfde, maar dan voor de "w" en "s" toetsen.
Verwant: De beste Unity 3D-zelfstudies voor beginners
Vervolgens zet je dat snelheid variabele die je in het spel hebt gemaakt en voltooi het laatste stukje van de puzzel voor spelersbewegingen in Unity.
rb.velocity = nieuwe Vector3(xMove, rb.velocity.y, zMove) * snelheid; // Creëert snelheid in de richting van waarde gelijk aan toetsaanslag (WASD). rb.velocity.y behandelt vallen + springen door de snelheid in te stellen op y.
Ga terug naar Unity's Inspecteur uitzicht voor de Speler voorwerp. Kijk eens naar de Stijf lichaam-onder Info, je ziet een waarde Snelheid. Dit is de waarde waarmee u target rb.velocity.
nieuwe Vector3(xMove, rb.velocity.y, zMove) * snelheid, maakt een nieuwe vector met de opgegeven x-, y- en z-waarden en vermenigvuldigt vervolgens de waarde van de vector met snelheid.
Zorg ervoor dat u de sleept Speler Beweging script op de Speler object in Unity, en dat is alles! Al met al heb je een werkend C#-script dat input van de speler ontvangt en deze omzet in karakterbewegingen in Unity.
Hier is de voltooide code:
met behulp van UnityEngine;
openbare klasse PlayerMovement: MonoBehaviour
{
openbare vlottersnelheid = 10f; // Regelt de snelheidsvermenigvuldiger
Stijf lichaam rb; // Vertelt script dat er een rigidbody is, we kunnen variabele rb gebruiken om ernaar te verwijzen in verder script// Start wordt aangeroepen voor de eerste frame-update
ongeldig Begin()
{
rb = GetComponent(); //rb is gelijk aan de starbody op de speler
}// Update wordt één keer per frame aangeroepen
ongeldige update()
{
float xMove = Invoer. GetAxisRaw("Horizontaal"); // d-toets verandert de waarde in 1, een toets verandert de waarde in -1
float zMove = Invoer. GetAxisRaw("Verticaal"); // w-toets verandert waarde in 1, s-toets verandert waarde in -1
rb.velocity = nieuwe Vector3(xMove, rb.velocity.y, zMove) * snelheid; // Creëert snelheid in de richting van waarde gelijk aan toetsaanslag (WASD). rb.velocity.y behandelt vallen + springen door de snelheid in te stellen op y.
}
}
Opmerking: Als je merkt dat je personage meer flopt dan wat dan ook, zorg er dan voor dat de rotatie van de speler in de Inspecteur.
Leer en maak meer in eenheid
Nu je weet hoe je spelerbewegingen programmeert in Unity met Rigidbody- en Collider-componenten, wat ga je nu leren? Misschien zou het vermakelijk en boeiend zijn om je bewegingscontroller uit te breiden om dingen als glijden, dubbelspringen en meer toe te voegen.
Unity Learn staat boordevol interessante onderwerpen om je vaardigheden op het gebied van game-ontwikkeling te verbeteren. Wij zijn van mening dat een van de belangrijkste factoren bij het uitbreiden van uw kennis van programmeren, is dat u elke dag iets nieuws leert. Blijf nieuwsgierig en gelukkig hacken!
Wil je beginnen met het ontwikkelen van je eigen games? Unity Learn is de beste en gemakkelijkste manier om te leren en te beheersen wat u moet weten.
Lees volgende
- Programmeren
- Spelontwikkeling
- Eenheid
- Programmeren

Marcus is een freelance tech-journalist en Junior Editor voor Programmeren bij MUO. Hij is een levenslange leerling, hobbyist front-end ontwikkelaar en schrijver van korte verhalen met meer dan 3 jaar ervaring in het ontwikkelen van proza dat lezers op de hoogte houdt.
Abonneer op onze nieuwsbrief
Word lid van onze nieuwsbrief voor technische tips, recensies, gratis e-boeken en exclusieve deals!
Klik hier om je te abonneren