Lezers zoals jij steunen MUO. Wanneer u een aankoop doet via links op onze site, kunnen we een aangesloten commissie verdienen. Lees verder.

Een personagecontroller kan je helpen bij het implementeren van eenvoudige bewegingsfysica in je game.

U kunt Unity3D-karaktercontrollers vanuit verschillende invalshoeken benaderen. Als je een bibliotheek met krachtige klassen en functies gebruikt, kan het maken van een op fysica gebaseerde personagecontroller een leuke plek zijn om je game-ontwikkeling te starten.

Stap 1: maak een scène met speler- en terreinobjecten

Zodra Unity is geopend en u een nieuw project hebt gemaakt, kunt u beginnen met het toevoegen van een aantal objecten aan uw scène. U kunt deze objecten in elke gewenste volgorde maken, maar zorg ervoor dat u de juiste instellingen gebruikt. Hoewel dit project eenvoudig is, is het een geweldige manier om het te doen aan de slag met Unity.

Een 3D-vliegtuigobject voor terrein

Het eerste object dat aan je scène moet worden toegevoegd, is een vliegtuig. Klik met de rechtermuisknop in het hiërarchievenster en plaats de muisaanwijzer erop

instagram viewer
3D-voorwerpen selecteer Vliegtuig van de lijst. U kunt de grootte van het vlak aanpassen om een ​​groter testgebied te bieden, maar u hoeft er verder niets aan te doen.

Een Cube Object Player-model

Vervolgens is het tijd om een ​​kubus aan de scène toe te voegen om als spelermodel te fungeren. Klik met de rechtermuisknop in het hiërarchievenster en plaats de muisaanwijzer erop 3D-voorwerpen selecteer Kubus uit het vervolgkeuzemenu. Plaats de nieuwe kubus zo dat deze zich boven het vlak bevindt dat u ook hebt toegevoegd. Je moet ook een rigidbody-component toevoegen om van de kubus een natuurkundig object te maken.

Selecteer de kubus en ga naar de Inspecteur. Klik op Onderdeel toevoegen zoek onderaan het paneel naar rigidbody en selecteer Stijf lichaam uit de lijst wanneer deze verschijnt. Kruis de... aan Gebruik zwaartekracht aanvinken en de rest van de instellingen laten zoals ze zijn.

Je kunt vinden gratis Unity-activa online om uw project op te fleuren.

Een third-person camera

Je scène zou al een camera moeten hebben die je kunt gebruiken als je third-person camera. Plaats de camera zo dat hij in een comfortabele positie van een derde persoon boven uw kubus zit. Ga naar het hiërarchievenster voordat u de camera naar de kubus sleept en neerzet om een ​​ouder-kindrelatie te creëren. De camera volgt je kubus automatisch als je dit hebt gedaan.

Een snelle test

Hoewel je scène nog geen code heeft, kun je het werk dat je tot nu toe hebt gedaan, testen. Klik op de Toneelstuk knop bovenaan het scherm om je spel te laden. Je zou de kubus moeten zien vallen en bovenop het vliegtuig landen, en de camera zou de kubus moeten volgen terwijl deze valt.

Stap 2: stel een C#-bestand in

Nu is het tijd om een ​​C#-bestand te maken, zodat je wat beweging kunt gaan programmeren. Ga naar het gedeelte Project, klik met de rechtermuisknop, plaats de muisaanwijzer op Maken en selecteer Map in de lijst. Noem de map Scripts of iets dergelijks.

Navigeer binnen uw nieuwe map en herhaal het proces, maar selecteer C# Script in de lijst. U kunt dit bestand elke naam geven, maar dit is ook de naam van de hoofdfunctie erin. Zorg ervoor dat uw nieuwe C# er zo uitziet.

gebruik makend van Systeem. Collecties;
gebruik makend van Systeem. Collecties. Algemeen;
gebruik makend van EenheidMotor;

openbaarklasCharacter_Control: MonoGedrag {
leegteBegin() {
}

leegteUpdate() {
}
}

Stap 3: gebruik C# om voorwaartse en achterwaartse beweging met snelheid te creëren

Voordat u aan de functies in uw scriptbestand toevoegt, moet u enkele openbare variabelen declareren. Als eerste is er een Rigidbody om het spelersmodel in op te bergen. Verklaar ook een vlotter om de bewegingssnelheid bij te houden. Deze variabelen gaan in de hoofdklasse, buiten alle functies om.

openbaar Stijve carrosserie stijve carrosserie;
openbaarvlot snelheid;

Vervolgens is het tijd om een ​​enkele regel code toe te voegen aan de Start-functie. Dit gebruikt een GetComponent-declaratie om de rigidbody-component van de kubus toe te wijzen aan de rigidbody-variabele die u hebt gemaakt.

leegteBegin() {
rigidbody = GetComponent ();
}

Nu kun je wat code toevoegen om je spelermodel in beweging te krijgen. Deze code is lekker simpel; je hebt slechts twee if-statements nodig, één voor voorwaartse beweging en één voor achterwaartse beweging. U kunt Invoer gebruiken. GetKey om te bepalen wanneer een toets wordt ingedrukt. In dit geval zoekt u naar het indrukken van de W- en S-toetsen.

Het indrukken van een van deze toetsen voegt een kracht toe aan de kubus rigidbody met behulp van rigidbody. AddForce. U kunt de richting en snelheid van de toegevoegde kracht berekenen door de positie van de Z-as (transform.forward) te vermenigvuldigen met de snelheidsvariabele. Er is geen klasse transform.backward die u kunt gebruiken voor achterwaartse beweging, maar dit is mogelijk door transform.forward te vermenigvuldigen met -1.

als (Invoer. Sleutel ophalen("w")) {
stijf lichaam. AddForce (transform.forward * snelheid);
}

als (Invoer. Sleutel ophalen("S")) {
stijf lichaam. AddForce((transform.forward * -1) * snelheid);
}

Sla het C#-bestand op en navigeer terug naar Unity. Zoek het script in het deelvenster Project en sleep het naar de tekenmodelkubus binnen de hiërarchie om het script aan dat object toe te wijzen. Wanneer u de kubus selecteert, zou u het script als een onderdeel in het infovenster moeten zien. Klik in het variabele vak rigidbody en selecteer de rigidbody van uw kubus.

Je kunt nu de Play-knop gebruiken om het spel te starten en je code uit te testen. Maar wacht! Er is een probleem; je Cube gaat rollen in plaats van recht vooruit. Ga terug naar de kubusinspecteur, zoek de Rigidbody-component en vink de vakjes aan om Rotatie op de X- en Z-as te bevriezen voordat je het spel opnieuw start. Nu zou het moeten werken.

Stap 4: Gebruik C# om links- en rechtsdraaiend met koppel te creëren

In tegenstelling tot achteruit en vooruit bewegen, vereist het draaien van je Cube-spelermodel een kracht die koppel wordt genoemd. Hiervoor heb je nog een variabele nodig: een public float om een ​​koppelwaarde toe te wijzen.

openbaarvlot koppel;

De code om naar links en rechts te draaien in dit script lijkt erg op de code die wordt gebruikt om vooruit en achteruit te gaan. Er is een als verklaring voor elke richting die zoekt naar drukken op de D-toets (naar rechts) of de A-toets (naar links).

De eerste stap in elke if-opdracht is het bepalen van de draairichting met behulp van de invoer. GetAxis-methode en wijs het resultaat toe aan een float-variabele. Gebruik daarna rigidbody. AddTorque om rotatiekracht toe te passen op het Cube-tekenmodel door het koppel, de draaiing en de Z-as van de kubus te vermenigvuldigen.

als (Invoer. Sleutel ophalen("D")) {
vlot draai = Invoer. GetAxis("Horizontaal");
stijf lichaam. AddTorque (transform.up * koppel * draai);
}

als (Invoer. Sleutel ophalen("A")) {
vlot draai = Invoer. GetAxis("Horizontaal");
stijf lichaam. AddTorque (transform.up * koppel * draai);
}

Sla uw code op en ga terug naar Unity om het uit te testen. Je kunt de snelheid en aanlooptijd van de rotatie van je spelermodel aanpassen door de Cube te selecteren en de massa-, sleep- en koppelvariabelen van de rigidbody in je script te bewerken. Dit voorbeeldproject rekent af met 1 massa, 1 weerstand en 2 koppel.

Stap 5: Gebruik C# om Jumping te programmeren

Als laatste element van deze Unity-personagecontroller is het tijd om je sprong te maken. Het maken van een sprong is complexer dan de andere basisbedieningen waaraan je hebt gewerkt, aangezien een sprong een beperkte hoogte moet hebben. Begin met het toevoegen van een privé-booleaanse variabele om bij te houden of de speler springt of niet.

privaatboel isJumping = vals;

Deze variabele doet niets zonder een instructie om hem te testen. In dit geval volstaat een eenvoudige if-opdracht om te controleren of de variabele onwaar is. Door dezelfde voorwaarde toe te voegen aan de andere beweging als verklaringen, stopt de speler met bewegen tijdens sprongen.

als (!is aan het springen) {
}

Door dezelfde voorwaarde toe te voegen aan de andere beweging als verklaringen, stopt de speler met bewegen tijdens sprongen.

als (Invoer. Sleutel ophalen("w") && !springt) {
stijf lichaam. AddForce (transform.forward * snelheid);
}

Binnen het !isJumping if-statement heb je nog een if-statement nodig, dit keer om te controleren op een toetsdruk op de springknop. De variabele isJumping instellen op true is het eerste wat u moet doen in deze if-instructie, gevolgd door het maken van een rigidbody.angularVelocity-declaratie om de krachten te verwijderen die momenteel op de kubus worden uitgeoefend.

Nu kunt u de rigidbody gebruiken. AddForce-declaratie om kracht toe te voegen aan de kubus op zijn Z-as, waardoor de opwaartse beweging van een sprong ontstaat. Eindelijk is het tijd om een ​​invoke-declaratie te gebruiken om na 0,8 seconden een andere functie aan te roepen.

als (!is aan het springen) {
als (Invoer. GetKeyDown("ruimte")) {
isJumping = WAAR;
stijf lichaam. AddForce (transform.up * snelheid * 120);
rigidbody.angularSnelheid = Vector3.nul;
Aanroepen("Move_Setter", 0.8 F);
}
}

Deze functie zet de variabele isJumping terug op false zodat beweging/springen weer mogelijk is, en de vertraging van 0,8 seconden voorkomt dat deze te vroeg wordt geactiveerd.

leegteVerplaats_Setter() {
isJumping = vals;
}

Stap 6: Test uw karaktercontrollercode

Sla je bestand op en ga terug naar Unity om de code die je hebt geschreven te testen. Zoals de meeste compilers, biedt Unity informatie over fouten en andere problemen met uw code, zodat u gemakkelijker kunt zien wat u mogelijk moet wijzigen. U kunt de volledige code voor dit project bekijken op onze GitHub bladzijde.

Unity-karaktercontrollers maken

U kunt kiezen uit verschillende benaderingen bij het maken van een personagecontroller in Unity. Het gebruik van fysica is een optie, maar je kunt ook het ingebouwde karaktercontrollersysteem gebruiken als je wilt.

Het verkennen van verschillende opties zoals deze is een geweldige manier om meer te weten te komen over tools zoals Unity.