Voeg in het begin een nieuw script toe aan je personage. Noem het PlayerMovement Script. Eerst hebben we een verwijzing nodig van het Player Movement Script naar de Character Controller. Het script wordt verteld om het personage te verplaatsen.
In het begin maken we een variabele aan:
openbare CharacterController2D-controller;
Dan heb je de mogelijkheid om de karaktercontroller naar een vrije ruimte te slepen.
Voor de beweging moeten de richting en de snelheid van de beweging worden gedefinieerd. Hiervoor heb je input van de speler nodig:
Pijltje naar links of A = 1
Pijl naar rechts of D = -1
Zo is het ook met de regelaar.
horizontalMove = Input.GetAxisRaw ("Horizontaal");
Het updategebied organiseert de invoer van de speler.
FixedUpdate wordt gebruikt voor natuurkunde. Deze functie is vereist.
Maak nog een variabele aan:
zweven horizontaalMove = 0f;
FixedUpdate verplaatst het personage.
void VastUpdate ()
{
controller.Move (horizontalMove, false, false);
}
De eerste false staat voor dat de speler niet mag hurken en de tweede voor dat hij niet mag springen.
Een definitie voor Move is vereist in het Player Controller-script:
public void Move (float move, bool crouch, bool jump)
{}
Als volgende variabele heb je nodig:
openbare vlotterloopsnelheid = 40f;
De input van de speler wordt vermenigvuldigd met de loopsnelheid:
horizontalMove = Input.GetAxisRaw ("Horizontal") * runSpeed;
Als de speler naar links en rechts beweegt, is de zet -40 en 40.
De beweging wordt ook vermenigvuldigd met Time.fixedDeltaTime.
Time.fixedDeltaTime is de tijd sinds de laatste FixedUpdate-functie is aangeroepen. Dit geeft aan dat de beweging met dezelfde hoeveelheid plaatsvindt, ongeacht hoe vaak de functie wordt aangeroepen. De snelheid van het personage is dus hetzelfde, ongeacht welk systeem of platform het is.
Als de pion valt, kan deze een beetje in de grond schuiven.
Daarom verandert in Rigidbody2D de botsingsdetectie van discreet naar continu.
Voor springen wordt gecontroleerd of we op de springtoets drukken of niet:
if (invoer.GetButtonDown ("Jump"))
{
springen = waar;
}
Dit moet ook worden gedaan in de functie FixedUpdate. De informatie wordt overgedragen met een Booleaanse variabele:
bool sprong = false;
De variabele jump is ook toegevoegd onder FixedUpdate.
Wanneer de springknop wordt ingedrukt, wordt het PlayerMovement-script doorgestuurd naar de controller die we willen springen. Daarna is het weer zover
springen = onwaar;
Dit moet worden gedefinieerd omdat we niet voor altijd willen overslaan.
Een ander probleem is dat wanneer het personage op een platform probeert te springen, het daar vast komt te zitten. Het personage moet dan naar beneden glijden en hierop vallen. Hiervoor is een natuurkundig materiaal nodig. Klik onder Project met de rechtermuisknop op Maken -> PhysicsMaterial2D
Noem het Glad. Zet Wrijving en veerkracht op 0. Pak het natuurkundemateriaal en sleep het naar het materiaal van de BoxCollider van de speler.
Als je meerdere botsers voor de protagonist hebt gedefinieerd, kun je het fysica-materiaal ook aan de andere botsers toewijzen.
De toetsenbordindeling wordt gedefinieerd via de Unity InputManager. Deze vind je onder de Projectinstellingen.
Klik met de rechtermuisknop op de springknop en kies Array-element dupliceren. Noem het "Kruk".
Als de spelers met de pijltjestoetsen willen spelen, definieert u eenvoudig een alternatieve knop.
Herhaal de stappen van springen tot hurken:
Wanneer de knop voor hurken wordt losgelaten, moet het personage ook stoppen met hurken. Het werkt dus niet zo goed als springen. Als de spelers met de pijltjestoetsen willen spelen, definieert u eenvoudig een alternatieve knop.
Voeg het volgende toe in de update-functie:
else if (Input.GetButtonUp ("Crouch"))
{
hurken = vals;
}
Om de corresponderende secties in de karaktercontroller te laten verschijnen, moet je ze van privé naar openbaar schakelen:
Trek dat Colliderdie moet worden gedeactiveerd in het overeenkomstige veld. Als er een ‘plafond’ boven je is, zal je personage langzamer gaan rijden als je op de hurken-knop drukt.