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:
- 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.
- 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.