Ukuze uhambise umlingiswa wakho udinga isilawuli somlingisi. Isiqalo yindawo enezinto ezishayisanayo. Udinga futhi umlingiswa. Umlingiswa udinga eyakhe I-Collider. Okulandelayo ukwengeza i-2D I-Rigidbody.
Dala iskripthi sohlamvu lwakho bese usetha igama elithi Character2DController.

Shintsha iskripthi sibe yize yangasese:

Nge-x-axis sidinga okokufaka:
var movement = Input.GetAxis ("Horizontal")
1 imele ukhiye womcibisholo wesokudla kanye no -1 ngokhiye womcibisholo wesobunxele.
Sidinga i-vector 3 entsha ye-x-axis njengenani lokufaka:
transform.position + = newVector3 (ukunyakaza, 0, 0) * Isikhathi.I-DeltaTime * MovementSpeed;
Isikhundla esisha sibalwa kusukela ku-vector 3 * Time.DeltaTime * MovementSpeed
Ngakho-ke ijubane lokunyakaza kufanele lengezwe njengokuguquguqukayo:
iflothi yomphakathi i-MovementSpeed = 1;
Iskripthi sibukeka kanjena:

Uma ucindezela ukudlala ku-Unity, manje usungahambisa isibalo ukusuka kwesobunxele uye kwesokudla. Ungasinyusa isivinini uma uhlamvu luhamba kancane kakhulu.

Manje dala ireferensi emzimbeni oqinile:
rigidbody2D yangasese rigidbody;
Faka okulandelayo entweni yokuqala:
Rigidbody = GetComponent ();
Okunye ukufaka kuyadingeka:
uma (Input.GetButtonDown ("Eqa"))
Udinga amandla ku-y-axis oqala ukweqa: Lokhu kubizwa ngokuthi yiJumpForce:
I-Rigidbody.AddForce (iVector3 entsha (0, iJumpForce));
I-JumpForce ifakwa njengokuguquguqukayo:
iflothi yomphakathi iJumpForce = 1;
Ingxenye inika umfutho wokugxuma:
I-Rigidbody.AddForce (i-Vector3 entsha (0, i-JumpForce), i-ForceMode2D.Impulse);
Manje i-eksisi Y ingabhekwa ukuthi yeqe kanye nje:
uma (Input.GetButtonDown ("Jump") && Mathf.Abs (Rigidbody.velocity.y) <0.001f)
Umbhalo oqediwe ubukeka kanjena:

Ngalokhu kuhlanganiswa ungaqala ukuhambisa. Iskripthi siba nzima ngokwengeziwe ngengxenye elandelayo yesifundo. Ukuze wenze lokhu, kufanele uqambe kabusha izingxenye ze-rigidbody ku-Rigidbody2D.
Udinga okuguqukayo okulandelayo kokugoqa:
iflothi yangasese CrouchSpeed = .36f;
I-Movement Smoothing isetshenziselwa ukushelela ukunyakaza:
iflothi yangasese i-MovementSmoothing = .05f;
Ukulawulwa Komoya kuchaza ukuthi ngabe umdlali uyakwazi ukulawula ngenkathi eqa noma cha:
i-Air boontrol yangasese = amanga;
I-WhatIsGround ichaza indawo engaphansi komdlali:
yangasese LayerMask WhatIsGround;
I-Groundcheck ihlola ukuthi ngabe umdlali uphansi noma cha:
iTransform GroundCheck yangasese;
I-CeilingCheck ihlola ukuthi ngabe kukhona umkhawulo ongaphezulu:
i-Transform CeilingCheck yangasese;
I-CrouchDisableCollider ichaza ukuthi i-collider izokwenziwa ingasebenzi uma umdlali ekhothama:
i-Collider2D yangasese CrouchDisableCollider;
Okuguqukayo kokuqala manje sekuchaziwe:

Ukuhlukahluka okunye kuyadingeka:
iflothi le-const GroundedRadius = .2f;
ichaza irediyasi yombuthano wokugqagqana ukunquma ukuthi ingabe ikusobuso obungaphansi obuchaziwe.
incwadi yangasese Isisekelo;
ikhombisa ukuthi umdlali uphansi noma cha.
I-const float CeilingRadius = .2f;
yi-radius yesiyingi sokugqagqana ukunquma ukuthi umdlali angakwazi yini ukuma noma uma kukhona ingubo phezu kwabo.
i-bool yangasese i-FacingRight = iyiqiniso;
Ukunquma ukuthi umdlali ubheke ngakuphi manje.
i-Vector3 Velocity yangasese = iVector3.zero;

Okulandelayo sidinga uhlelo lomcimbi wobumbano:
Uyangeza:
kusetshenziswa i-UnityEnginge.Events;

Ngaphezu kwalokho, i-UnityEvent iyadingeka ukubona ukuthi umlingiswa uyahlala ngemuva kokugxuma noma cha:
ubumbano lomphakathiEvent OnLandEvent;
IBoolEvent iphathelene nokukhothama:
isigaba somphakathi iBoolEvent: UnityEvent {}
umphakathi BoolEvent OnCrouchEvent;
incwadi yangasese wasCrouching = false;

Awukho umsebenzi wokuqala kwiskripthi, kepha umsebenzi wokuphaphama:
Ukuqala kuqala lapho uhlelo luqala. I-Phaphama ibhekisa entweni eqalwa ngaphakathi kwento.
Igebe eliyimfihlo i-Phaphama ()
{
Rigidbody2D = GetComponent ();
uma (OnLandEvent == null)
OnLandEvent = i-UnityEvent entsha ();
uma (OnCrouchEvent == null)
I-OnCrouchEvent = I-BoolEvent ();
}
Okulandelayo sichaza isikhundla esithi "Sisekelo" ngokuningiliziwe:
Umdlali ugxunyekwe lapho irediyasi echaziwe ihlangana nendawo yomhlabathi, ebizwa njengomhlabathi:
i-void yangasese i-FixedUpdate ()
{
i-bool wasGrounded = Yakhiwe;
Isisekelo = amanga;
Collider2D [] colliders = Physics2D.OverlapCircleAll (GroundCheck.position, GroundedRadius, WhatIsGround);
ye (int i = 0; i <colliders.Lenght; i ++)
{
uma (ama-colliders [i] .gameObject! = gameObject)
{
Isisekelo = iqiniso;
uma (! kwakubiyelwe)
OnLandEvent.Invoke ();
}
}
}
Isinyathelo esilandelayo ukubheka ukuthi uma umlingiswa egobile, angakwazi ukuma. Uma kungenjalo, kufanele acathame:
Ukuhamba okungekho emphakathini
{
uma (! crouch)
{
Uma umlingiswa enengubo ebavimbayo ukuthi bavuke, qhubeka uqoshame:
uma (i-Physics2D.OverlapCircle (isikhundla seCeilingCheck, i-CeilingRadius, i-WhatIsGround))
{
crouch = iqiniso;
}
}
Umdlali angakwazi ukulawula isibalo kuphela uma sisemhlabathini noma uma i-airControl ivuliwe:
uma (Kubekelwe phansi i-AirControl)
{
Lapho isibalo sigobile:
uma (crouch)
{
uma (ubekhala)
{
wasCrouching = iqiniso;
OnCrouchEvent.Invoke (kuyiqiniso);
}
ngaphandle kwalokho uma (bekunguCrouching)
{
wasCrouching = amanga;
OnCrouchEvent.Invoke (amanga)
}
Nciphisa ijubane ngesiphindaphindo se-crouchSpeed:
hambisa * = CrouchSpeed;
Khubaza okukodwa kokushayisanayo lapho isibalo sikhothama noma sikhothama:
uma (CrouchDisableCollider! = null)
I-CrouchDisableCollider.enabled = yamanga;
} okunye
{
Yenza kusebenze i-collider lapho isibalo singacoli noma sikhotheme:
uma (CrouchDisableCollider! = null)
CrouchDisableCollider.enabled = kuyiqiniso;
uma (ubekhala)
{
wasCrouching = amanga;
OnCrouchEvent.Invoke (amanga);
}
}

Hambisa umlingiswa ngokuthola isivinini sethagethi:
Vector3 targetVelocity = iVector2 entsha (hambisa * 10f, Rigidbody2D.velocity.y);
Bese uyicabalele bese uyisebenzisa kumlingiswa:
Rigidbody2D.velocity = Vector3.SmoothDamp (m_Rigidbody2D.velocity, targetVelocity, Ref Velocity, MovementSmoothing);
Lapho okokufaka kuhamba kwesokudla futhi umdlali ekhomba kwesobunxele:
uma (hambisa> 0 &&! m_FacingRight)
vula isidlali:
Flip ();
Ngaphandle kwalokho, uma okokufaka kudlulela kwesobunxele futhi isidlali sibheke ngakwesokudla:
ngaphandle kwalokho uma (hamba <0 && FacingRight)
vula isidlali:
Flip ();
Lapho umdlali kufanele agxume:
uma (Kunesisekelo && gxuma)
{
Faka amandla aqonde mpo kumdlali.
Isisekelo = amanga;
Rigidbody2D.AddForce (Vector2 entsha (0f, JumpForce));

i-flip eyimfihlo yangasese ()
{
Shintsha indlela umdlali amakwe ngayo njengobheke:
UkubhekanaRight =! UkubhekanaRight;
Phindaphinda isikalo sendawo somdlali ngo -1.
IVector3 theScale = transform.localScale;
theScale.x * = -1;
guqula.localScale = theScale;
}
}
Umbhalo oqediwe ubukeka kanjena:



