Player 3D og 2D Wall Jump Tutorial for Unity

Wall jumping, en mekaniker som er utbredt i plattformspill og actionspill, lar spillere hoppe av vegger, noe som gir kompleksitet og allsidighet til navigasjonen. Denne opplæringen tar sikte på å integrere vegghopping i den medfølgende FPS-kontrolleren. Mot slutten vil spillerkarakteren være i stand til å utføre vegghopp i både 2D- og 3D-innstillinger.

Implementering av Wall Jump for 3D ved å bruke 'SC_FPSController'-skriptet

Fra og med den gitte grunnkoden fra Unity FPS Controller-opplæringen, introduserer vi vegghoppmekanikeren.

Trinn 1: Sette opp veggdeteksjon

  • Legg til et nytt lag i Unity kalt "Wall" for objekter som kan hoppes av på veggen.
  • Oppdater 'SC_FPSController'-klassen, som du kan få fra vår Unity FPS Controller-opplæring, med følgende variabler:
public LayerMask wallLayer;
public float wallJumpForce = 10f;
private bool isTouchingWall = false;

Trinn 2: Oppdage veggen

  • Inkorporer følgende logikk i 'Update()'-metoden for å oppdage en vegg:
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;
}

Denne raycasten i koden ovenfor vil oppdage vegger til venstre og høyre for spilleren.

Trinn 3: Implementering av Wall Jump for 3D

  • Innenfor 'Update()'-metoden, etter bakkehopplogikken, sett inn:
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;
    }
}

Denne logikken i koden ovenfor sjekker om spilleren trykker på hoppknappen, kan bevege seg og berører en vegg. I så fall gir den en vertikal kraft og en liten horisontal kraft bort fra veggen.

Implementering av Wall Jump for 2D ved å bruke 'CharacterController2D'-skriptet

Fra og med den gitte grunnkoden fra 2D Character Controller for Unity-opplæringen, introduserer vi wall jump-mekanikeren.

Trinn 1: Sette opp veggdeteksjon

  • Legg til et nytt lag i Unity kalt "Wall" for objekter som kan hoppes av på veggen.
  • Oppdater 'CharacterController2D'-klassen, som du kan få fra vår 2D Character Controller for Unity-opplæringen, med følgende variabler:
public LayerMask wallLayer;
public float wallJumpForce = 10f;
private bool isTouchingWall = false;

Trinn 2: Oppdage veggen i 2D

  • Inkorporer følgende logikk i 'Update()'-metoden for å oppdage en vegg:
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;
}

Trinn 3: Implementering av Wall Jump for 2D

  • Innenfor 'Update()'-metoden, etter bakkehopplogikken, sett inn:
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
    }
}

Spørsmål adressert:

  1. Hvordan kan en karakter oppdage en vegg i Unity?: En karakter kan oppdage vegger ved å bruke raycasting. Ved å skyte en usynlig stråle fra spilleren i ønsket retning, kan man finne ut om en gjenstand, som en vegg, skjærer denne strålen.
  2. Hva er forskjellen mellom 2D- og 3D-vegghoppimplementering i Unity?: I Unity bruker 2D-fysikk 'Physics2D'-metoder (som 'Physics2D.Raycast()'), mens 3D-fysikk bruker 'Physics'-metoder (som 'Physics.Raycast()'). Logikken forblir relativt lik, men metoder og retninger (Vector2 for 2D, Vector3 for 3D) varierer.

Konklusjon

Dette tillegget gjør det mulig for karakteren i 2D-rommet å hoppe av vegger. Eksperimentering med kraftverdiene kan være nødvendig for å sikre jevn spilling. Ved å integrere disse trinnene vil spillerne finne at 2D-karakterens bevegelse er mer allsidig og dynamisk i miljøer med vegger.

Foreslåtte artikler
Rigidbody-basert Planetary Player Controller for Unity
Legger til Double Jump Support til en 2D Platformer Character Controller i Unity
Implementering av Parkour-systemet i Unity
2D Character Controller for Unity
Top-down spillerkontrolleropplæring for Unity
Helikopterkontrollør for Unity
Bilkontroller for Unity