Player 3D și 2D Wall Jump Tutorial pentru Unity

Saltul pe perete, o mecanică răspândită în jocurile de platformă și acțiune, permite jucătorilor să sară de pe pereți, adăugând complexitate și versatilitate navigării. Acest tutorial își propune să integreze saltul de perete în controlerul FPS furnizat. Până la sfârșit, personajul jucător va putea să execute salturi de perete atât în ​​setări 2D, cât și 3D.

Implementarea Wall Jump pentru 3D folosind scriptul 'SC_FPSController'

Începând cu codul de bază dat din tutorialul Unity FPS Controller, vom introduce mecanicul de salt de perete.

Pasul 1: Configurarea detectării peretelui

  • Adăugați un nou strat în Unity numit "Wall" pentru obiectele de pe care pot fi sărite de pe perete.
  • Actualizați clasa 'SC_FPSController', pe care o puteți obține din tutorialul nostru Unity FPS Controller, cu următoarele variabile:
public LayerMask wallLayer;
public float wallJumpForce = 10f;
private bool isTouchingWall = false;

Pasul 2: Detectarea peretelui

  • Încorporați următoarea logică în cadrul metodei 'Update()' pentru a detecta un perete:
RaycastHit hit;
if (Physics.Raycast(transform.position, transform.right, out hit, 1f, wallLayer) || Physics.Raycast(transform.position, -transform.right, out hit, 1f, wallLayer))
{
    isTouchingWall = true;
}
else
{
    isTouchingWall = false;
}

Acest raycast din codul de mai sus va detecta pereții din stânga și din dreapta jucătorului.

Pasul 3: Implementarea Wall Jump pentru 3D

  • În cadrul metodei 'Update()', după logica sărituri la sol, introduceți:
else if (Input.GetButton("Jump") && canMove && isTouchingWall)
{
    moveDirection.y = wallJumpForce;

    // This adds a bit of horizontal force opposite the wall for a more dynamic jump
    if (Physics.Raycast(transform.position, transform.right, 1f, wallLayer))
    {
        moveDirection += -transform.right * wallJumpForce / 2.5f; // Adjust the divisor for stronger/weaker push.
    }
    else if (Physics.Raycast(transform.position, -transform.right, 1f, wallLayer))
    {
        moveDirection += transform.right * wallJumpForce / 2.5f;
    }
}

Această logică din codul de mai sus verifică dacă jucătorul apasă butonul de salt, se poate mișca și atinge un perete. Dacă da, ea oferă o forță verticală și o ușoară forță orizontală departe de perete.

Implementarea Wall Jump pentru 2D folosind scriptul 'CharacterController2D'

Începând cu codul de bază dat din tutorialul 2D Character Controller pentru Unity, vom introduce mecanicul wall jump.

Pasul 1: Configurarea detectării peretelui

  • Adăugați un nou strat în Unity numit "Wall" pentru obiectele de pe care pot fi sărite de pe perete.
  • Actualizați clasa 'CharacterController2D', pe care o puteți obține din tutorialul nostru 2D Character Controller pentru Unity, cu următoarele variabile:
public LayerMask wallLayer;
public float wallJumpForce = 10f;
private bool isTouchingWall = false;

Pasul 2: Detectarea peretelui în 2D

  • Încorporați următoarea logică în cadrul metodei 'Update()' pentru a detecta un perete:
RaycastHit2D wallHitLeft = Physics2D.Raycast(transform.position, Vector2.left, 1f, wallLayer);
RaycastHit2D wallHitRight = Physics2D.Raycast(transform.position, Vector2.right, 1f, wallLayer);

if (wallHitLeft.collider != null || wallHitRight.collider != null)
{
    isTouchingWall = true;
}
else
{
    isTouchingWall = false;
}

Pasul 3: Implementarea Wall Jump pentru 2D

  • În cadrul metodei 'Update()', după logica sărituri la sol, introduceți:
if (Input.GetKeyDown(KeyCode.W) && isTouchingWall && !isGrounded)
{
    r2d.velocity = new Vector2(r2d.velocity.x, jumpHeight);
    if (wallHitLeft.collider != null)
    {
        r2d.AddForce(new Vector2(wallJumpForce, 0)); // Push to the right when wall is on the left
    }
    else if (wallHitRight.collider != null)
    {
        r2d.AddForce(new Vector2(-wallJumpForce, 0)); // Push to the left when wall is on the right
    }
}

Întrebări adresate:

  1. Cum poate un personaj detecta un perete în Unity?: Un personaj poate detecta pereți folosind raycasting. Tragând o rază invizibilă de la jucător în direcția dorită, se poate determina dacă un obiect, cum ar fi un perete, se intersectează cu această rază.
  2. Care este diferența dintre implementarea saltului de perete 2D și 3D în Unity?: În Unity, fizica 2D folosește metode 'Physics2D' (cum ar fi 'Physics2D.Raycast()'), în timp ce fizica 3D folosește metode 'Physics' (cum ar fi 'Physics.Raycast()'). Logica rămâne relativ similară, dar metodele și direcțiile (Vector2 pentru 2D, Vector3 pentru 3D) variază.

Concluzie

Această adăugare îi permite personajului din spațiul 2D să sară de pe pereți. Ar putea fi necesară experimentarea cu valorile forței pentru a asigura un joc fără probleme. Prin integrarea acestor pași, jucătorii vor descoperi că mișcarea personajului 2D este mai versatilă și mai dinamică în mediile cu pereți.

Articole sugerate
Tutorial de sus în jos pentru controlerul jucătorului pentru Unity
Implementarea sistemului Parkour în Unity
Tutorial lanternă pentru Unity
Tutorial 3D Worm Controller pentru Unity
Controler de jucător RTS și MOBA pentru Unity
Adăugarea suportului pentru salt dublu la un controler de caractere 2D platformer în Unity
Cum să adăugați suport pentru platforma în mișcare la controlerul de caractere în Unity