Player 3D og 2D Wall Jump Tutorial for Unity

Wall jumping, en mekaniker, der er udbredt i platforms- og actionspil, giver spillere mulighed for at springe fra vægge, hvilket tilføjer kompleksitet og alsidighed til navigation. Denne vejledning har til formål at integrere vægspring i den medfølgende FPS-controller. Ved udgangen vil spillerens karakter være i stand til at udføre vægspring i både 2D- og 3D-indstillinger.

Implementering af Wall Jump til 3D ved hjælp af 'SC_FPSController' scriptet

Startende med den givne basiskode fra Unity FPS Controller tutorial, introducerer vi vægspringmekanikeren.

Trin 1: Opsætning af væggenkendelse

  • Tilføj et nyt lag i Unity ved navn "Wall" for objekter, der kan hoppes af på væggen.
  • Opdater 'SC_FPSController' klassen, som du kan få fra vores Unity FPS Controller tutorial med følgende variabler:
public LayerMask wallLayer;
public float wallJumpForce = 10f;
private bool isTouchingWall = false;

Trin 2: Registrering af væggen

  • Inkorporer følgende logik i 'Update()'-metoden for at detektere en væg:
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 raycast i koden ovenfor vil registrere vægge til venstre og højre for afspilleren.

Trin 3: Implementering af Wall Jump til 3D

  • Inden for 'Update()' metoden, efter jordspringslogikken, indsæt:
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 logik i koden ovenfor tjekker, om spilleren trykker på springknappen, kan bevæge sig og rører en væg. Hvis det er tilfældet, giver det en lodret kraft og en lille vandret kraft væk fra væggen.

Implementering af Wall Jump til 2D ved hjælp af 'CharacterController2D' scriptet

Startende med den givne basiskode fra 2D Character Controller til Unity tutorial, introducerer vi wall jump mekanikeren.

Trin 1: Opsætning af væggenkendelse

  • Tilføj et nyt lag i Unity ved navn "Wall" for objekter, der kan hoppes af på væggen.
  • Opdater 'CharacterController2D' klassen, som du kan få fra vores 2D Character Controller til Unity tutorial med følgende variabler:
public LayerMask wallLayer;
public float wallJumpForce = 10f;
private bool isTouchingWall = false;

Trin 2: Detektering af væggen i 2D

  • Inkorporer følgende logik i 'Update()'-metoden for at detektere en væg:
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;
}

Trin 3: Implementering af Wall Jump til 2D

  • Inden for 'Update()' metoden, efter jordspringslogikken, indsæt:
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
    }
}

Besvarede spørgsmål:

  1. Hvordan kan en karakter registrere en væg i Unity?: En karakter kan registrere vægge ved hjælp af raycasting. Ved at skyde en usynlig stråle fra spilleren i den ønskede retning, kan man afgøre, om en genstand, som en væg, skærer denne stråle.
  2. Hvad er forskellen mellem 2D- og 3D-vægspringsimplementering i Unity?: I Unity bruger 2D-fysik 'Physics2D'-metoder (som 'Physics2D.Raycast()'), mens 3D-fysik bruger 'Physics' metoder (som 'Physics.Raycast()'). Logikken forbliver relativt ens, men metoder og retninger (Vector2 for 2D, Vector3 for 3D) varierer.

Konklusion

Denne tilføjelse gør det muligt for karakteren i 2D-rummet at hoppe af vægge. Eksperimentering med kraftværdierne kan være nødvendigt for at sikre glat gameplay. Ved at integrere disse trin vil spillerne opleve, at 2D-karakterens bevægelse er mere alsidig og dynamisk i miljøer med vægge.

Foreslåede artikler
Top-Down Player Controller Tutorial til Unity
Tilføjelse af Double Jump Support til en 2D Platformer Character Controller i Unity
Helikopter Controller for Unity
Implementering af Parkour System i Unity
Tilføjelse af Crouching til FPS Player i Unity
Lommelygte tutorial til Unity
3D Worm Controller Tutorial til Unity