Samouczek skakania po ścianie w 3D i 2D dla odtwarzacza Unity

Skakanie po ścianach, mechanika rozpowszechniona w platformówkach i grach akcji, pozwala graczom skakać po ścianach, zwiększając złożoność i wszechstronność nawigacji. Ten samouczek ma na celu zintegrowanie skakania po ścianach z dostarczonym kontrolerem FPS. Na koniec postać gracza będzie mogła wykonywać skoki po ścianach zarówno w trybie 2D, jak i 3D.

Implementacja Wall Jump dla 3D przy użyciu skryptu 'SC_FPSController'

Zaczynając od kodu bazowego podanego w tutorialu Unity Kontroler FPS, przedstawimy mechanikę skoków po ścianie.

Krok 1: Konfigurowanie wykrywania ścian

  • Dodaj nową warstwę w Unity o nazwie "Wall" dla obiektów, z których można skakać po ścianach.
  • Zaktualizuj klasę 'SC_FPSController', którą możesz uzyskać z naszego samouczka dotyczącego Unity kontrolera FPS, dodając następujące zmienne:
public LayerMask wallLayer;
public float wallJumpForce = 10f;
private bool isTouchingWall = false;

Krok 2: Wykrywanie ściany

  • Wprowadź następującą logikę do metody 'Update()', aby wykryć ścianę:
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;
}

Ten raycast w powyższym kodzie wykryje ściany po lewej i prawej stronie gracza.

Krok 3: Implementacja skoku po ścianie dla 3D

  • W metodzie 'Update()' po logice skoku na ziemię wstaw:
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;
    }
}

Ta logika w powyższym kodzie sprawdza, czy gracz naciska przycisk skoku, może się poruszać i dotyka ściany. Jeśli tak, wywiera siłę pionową i niewielką siłę poziomą od ściany.

Implementacja Wall Jump dla 2D przy użyciu skryptu 'CharacterController2D'

Zaczynając od podanego kodu bazowego z samouczka 2D Character Controller dla Unity, przedstawimy mechanikę skok po ścianie.

Krok 1: Konfigurowanie wykrywania ścian

  • Dodaj nową warstwę w Unity o nazwie "Wall" dla obiektów, z których można skakać po ścianach.
  • Zaktualizuj klasę 'CharacterController2D', którą możesz uzyskać z naszego samouczka 2D Character Controller for Unity, dodając następujące zmienne:
public LayerMask wallLayer;
public float wallJumpForce = 10f;
private bool isTouchingWall = false;

Krok 2: Wykrywanie ściany w 2D

  • Wprowadź następującą logikę do metody 'Update()', aby wykryć ścianę:
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;
}

Krok 3: Implementacja skoku po ścianie dla 2D

  • W metodzie 'Update()' po logice skoku na ziemię wstaw:
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
    }
}

Zadane pytania:

  1. W jaki sposób postać może wykryć ścianę w Unity?: Postać może wykryć ściany za pomocą raycasting. Wystrzeliwując z gracza niewidzialny promień w żądanym kierunku, można określić, czy obiekt taki jak ściana przecina się z tym promieniem.
  2. Jaka jest różnica pomiędzy implementacją skoków po ścianach 2D i 3D w Unity?: W Unity fizyka 2D używa metod 'Physics2D' (takich jak 'Physics2D.Raycast()'), podczas gdy fizyka 3D używa metod 'Physics' (takich jak 'Physics.Raycast()'). Logika pozostaje stosunkowo podobna, ale metody i kierunki (Vector2 dla 2D, Vector3 dla 3D) są różne.

Wniosek

Dodatek ten umożliwia postaci w przestrzeni 2D skakanie po ścianach. Aby zapewnić płynną rozgrywkę, konieczne może być eksperymentowanie z wartościami siły. Integrując te kroki, gracze odkryją, że ruchy postaci 2D będą bardziej wszechstronne i dynamiczne w środowiskach ze ścianami.