I begynnelsen legger du til et nytt manus til karakteren din. Gi det navnet PlayerMovement Script. Først trenger vi en referanse fra Player Movement Script til Character Controller. Manuset får beskjed om å flytte karakteren.
I begynnelsen lager vi en variabel:
offentlig CharacterController2D kontroller;
Deretter har du muligheten til å dra tegnkontrolleren til en ledig plass.
Bevegelsens retning og hastighet må defineres for bevegelsen. For dette trenger du input fra spilleren:
Venstre piltast eller A = 1
Høyrepiltast eller D = -1
Det er det samme med kontrolleren.
horizontalMove = Input.GetAxisRaw ("Horisontal");
Oppdateringsområdet organiserer input fra spilleren.
FixedUpdate brukes til fysikk. Denne funksjonen er nødvendig.
Lag en annen variabel:
flyte horisontaltFlytt = 0f;
FixedUpdate flytter tegnet.
void FixedUpdate()
{
controller.Move (horizontalMove, false, false);
}
Den første falske står for at spilleren ikke skal huke og den andre for at han ikke skal hoppe.
En definisjon for Move kreves i Player Controller Script:
offentlig tomrom Flytt (flytebevegelse, bool crouch, bool jump)
{}
Som den neste variabelen trenger du:
offentlig flyte runSpeed = 40f;
Inngangen fra spilleren multipliseres med kjørehastigheten:
horizontalMove = Input.GetAxisRaw ("Horisontal") * runSpeed;
Hvis spilleren beveger seg til venstre og høyre, vil trekket være på -40 og 40.
Bevegelsen multipliseres også med Time.fixedDeltaTime.
Time.fixedDeltaTime er tiden siden den siste FixedUpdate -funksjonen ble kalt. Dette spesifiserer at bevegelsen skjer med samme mengde, uansett hvor ofte funksjonen kalles. Dermed er karakterens hastighet den samme, uansett hvilke systemer eller plattformer det er.
Hvis bonden faller, kan den forskyve seg litt i bakken.
Det er derfor i Rigidbody2D endres kollisjonsdeteksjonen fra diskret til kontinuerlig.
For hopping kontrolleres det om vi trykker på hoppetasten eller ikke:
if (input.GetButtonDown ("Jump"))
{
hopp = sant;
}
Dette bør også gjøres i FixedUpdate -funksjonen. Informasjonen overføres med en boolsk variabel:
bool jump = usant;
Hoppvariabelen legges også til under FixedUpdate.
Når du trykker på hoppknappen, videresender PlayerMovement -skriptet til kontrolleren som vi vil hoppe over. Etter det blir det igjen
hopp = usant;
Dette må defineres ettersom vi ikke vil hoppe for alltid.
Et annet problem er at når karakteren prøver å hoppe inn på en plattform, blir den sittende fast der. Karakteren skal deretter gli ned og falle ned på dette. Det kreves et fysikkmateriale for dette. Under Project høyreklikker du på Create–> PhysicsMaterial2D
Gi den navnet Glatt. Sett Friction and Bounciness til 0. Ta PhysicsMaterial og dra det inn på materialet fra spillerens BoxCollider.
Hvis du har definert flere kolliderere for hovedpersonen, kan du også tildele fysikkmaterialet til de andre kolliderne.
Tastaturoppsettet er definert via Unity InputManager. Du finner dette under prosjektinnstillingene.
Høyreklikk på hoppknappen og velg Duplicate Array Element. Gi den navnet "Crouch".
Hvis spillerne vil spille med piltastene, kan du bare definere en alternativ knapp.
Gjenta trinnene fra å hoppe til huke:
Når crouch -knappen slippes, bør karakteren også slutte å huke. Så det fungerer ikke helt som å hoppe. Hvis spillerne vil spille med piltastene, kan du bare definere en alternativ knapp.
Legg til følgende i oppdateringsfunksjonen:
annet hvis (Input.GetButtonUp ("Crouch"))
{
huk = falsk;
}
Slik at de tilsvarende seksjonene vises i tegnkontrolleren, må du bytte dem fra privat til offentlig:
Trekk det Collidersom skal deaktiveres i det tilsvarende feltet. Hvis det er et "tak" over deg, vil karakteren din bremse ned når du trykker på krøkeknappen.