Foegje yn it begjin in nij skript ta oan jo karakter. Name it PlayerMovement Script. Earst hawwe wy in referinsje nedich fan it Player Movement Script nei de Character Controller. It skript wurdt ferteld it karakter te ferpleatsen.
Oan it begjin meitsje wy in fariabele:
iepenbiere CharacterController2D controller;
Dan hawwe jo de opsje om de karakterkontroller nei in frije romte te slepen.
De rjochting en de snelheid fan 'e beweging moatte wurde definieare foar de beweging. Hjirfoar hawwe jo ynput nedich fan 'e spiler:
Pylk nei lofts of A = 1
Pylk nei rjochts of D = -1
It is itselde mei de controller.
horizontalMove = Input.GetAxisRaw ("Horizontaal");
It fernijingsgebiet organisearret de ynput fan 'e spiler.
FixedUpdate wurdt brûkt foar natuerkunde. Dizze funksje is fereaske.
Meitsje in oare fariabele oan:
float horizontalMove = 0f;
FixedUpdate ferpleatst it karakter.
void FixedUpdate()
{
controller.Move (horizontalMove, false, false);
}
De earste falske stiet foar dat de spiler net hoecht te hurkjen en de twadde dêrfoar moat hy net springe.
In definysje foar Move is fereaske yn it Player Controller Script:
iepenbiere leechte Ferpleatse (driuwende beweging, bool crouch, bool jump)
{}
As de folgjende fariabele hawwe jo nedich:
iepenbiere float runSpeed = 40f;
De ynput fan 'e spiler wurdt fermannichfâldige mei de rinnende snelheid:
horizontalMove = Input.GetAxisRaw ("Horizontaal") * runSpeed;
As de spiler nei links en rjochts beweecht, sil de beweging op -40 en 40 wêze.
De beweging wurdt ek fermannichfâldige mei Time.fixedDeltaTime.
Time.fixedDeltaTime is de tiid sûnt de lêste funksje FixedUpdate waard neamd. Dit spesifisearret dat de beweging mei itselde bedrach plakfynt, nettsjinsteande hoe faak de funksje wurdt neamd. Sa is de snelheid fan it karakter deselde, nettsjinsteande hokker systemen of platfoarms it is.
As de pion falt, kin it in bytsje yn 'e grûn ferskowe.
Dêrom feroaret yn Rigidbody2D de botsingdeteksje fan diskret nei trochgeande.
Foar springen wurdt kontrolearre oft wy op de sprongtoets drukke as net:
if (input.GetButtonDown ("Jump"))
{
jump = wier;
}
Dit moat ek wurde dien yn 'e funksje FixedUpdate. De ynformaasje wurdt oerdroegen mei in Booleaanske fariabele:
bool jump = false;
De sprongfariabele wurdt ek tafoege ûnder FixedUpdate.
As de sprongknop wurdt yndrukt, stjoert it PlayerMovement -skript troch nei de controller dy't wy wolle springe. Dêrnei sil it wer wêze
jump = false;
Dit moat wurde definieare, om't wy net foar altyd wolle oerslaan.
In oar probleem is dat as it karakter besiket op in platfoarm te springen, it dêr fêst komt te sitten. It karakter soe dan hjirûnder moatte glide en falle. In fysika materiaal is hjirfoar fereaske. Klikje ûnder Projekt mei de rechtermuisknop oanmeitsje–> PhysicsMaterial2D
Name it Slippery. Stel wriuwing en bounciness yn op 0. Nim it PhysicsMaterial en sleep it nei it materiaal fan 'e BoxCollider fan' e spiler.
As jo ferskate kolliders hawwe definieare foar de haadpersoan, kinne jo it fysika -materiaal ek tawize oan 'e oare kolliders.
De toetseboerdyndieling wurdt definieare fia de Unity InputManager. Jo kinne dit fine ûnder de Project Settings.
Rjochts klikke op de sprongknop en kies Duplicate Array Element. Noem it "Crouch".
As de spilers mei pylktoetsen wolle boartsje, definiearje dan gewoan in alternative knop.
Werhelje de stappen fan springen oant krûpen:
As de crouch -knop wurdt frijlitten, moat it karakter ek stopje mei hurkjen. Dat it wurket net heulendal as springen. As de spilers mei pylktoetsen wolle boartsje, definiearje dan gewoan in alternative knop.
Foegje it folgjende ta yn 'e fernijingsfunksje:
oars as (Input.GetButtonUp ("Crouch"))
{
crouch = falsk;
}
Dat de oerienkommende seksjes ferskine yn 'e karakterkontroller, moatte jo se wikselje fan privee nei iepenbier:
Trek dat Colliderdy't moatte wurde deaktivearre yn it byhearrende fjild. As der in "plafond" boppe dy, dyn karakter sil fertrage as jo drukke op de crouch knop.