Spelar 3D och 2D Wall Jump Tutorial för Unity

Wall jumping, en mekaniker som är vanligt förekommande i plattformsspel och actionspel, låter spelare hoppa från väggar, vilket ger komplexitet och mångsidighet till navigering. Denna handledning syftar till att integrera wall jumping i den medföljande FPS Controller. I slutet kommer spelarkaraktären att kunna utföra vägghopp i både 2D- och 3D-inställningar.

Implementera Wall Jump för 3D med 'SC_FPSController'-skriptet

Med utgångspunkt i den givna baskoden från Unity FPS Controller handledning, kommer vi att introducera vägghoppmekanikern.

Steg 1: Konfigurera väggdetektering

  • Lägg till ett nytt lager i Unity som heter "Wall" för objekt som kan hoppa från väggen.
  • Uppdatera 'SC_FPSController' klassen, som du kan få från vår Unity FPS Controller handledning, med följande variabler:
public LayerMask wallLayer;
public float wallJumpForce = 10f;
private bool isTouchingWall = false;

Steg 2: Upptäck väggen

  • Inkorporera följande logik i 'Update()'-metoden för att upptäcka en vägg:
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;
}

Denna raycast i koden ovan kommer att upptäcka väggar till vänster och höger om spelaren.

Steg 3: Implementera Wall Jump för 3D

  • Inom metoden 'Update()', efter markhoppslogiken, infoga:
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;
    }
}

Denna logik i koden ovan kontrollerar om spelaren trycker på hoppknappen, kan röra sig och rör vid en vägg. Om så är fallet ger det en vertikal kraft och en liten horisontell kraft bort från väggen.

Implementera Wall Jump för 2D med 'CharacterController2D'-skriptet

Börjar med den givna baskoden från 2D Character Controller för Unity handledning, vi kommer att introducera wall jump mekanikern.

Steg 1: Konfigurera väggdetektering

  • Lägg till ett nytt lager i Unity som heter "Wall" för objekt som kan hoppa från väggen.
  • Uppdatera 'CharacterController2D' klassen, som du kan få från vår 2D Character Controller för Unity handledning, med följande variabler:
public LayerMask wallLayer;
public float wallJumpForce = 10f;
private bool isTouchingWall = false;

Steg 2: Upptäck väggen i 2D

  • Inkorporera följande logik i 'Update()'-metoden för att upptäcka en vägg:
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;
}

Steg 3: Implementera Wall Jump för 2D

  • Inom metoden 'Update()', efter markhoppslogiken, infoga:
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
    }
}

Frågor som ställs:

  1. Hur kan en karaktär upptäcka en vägg i Unity?: En karaktär kan upptäcka väggar med raycasting. Genom att skjuta en osynlig stråle från spelaren i önskad riktning kan man avgöra om ett föremål, som en vägg, skär denna stråle.
  2. Vad är skillnaden mellan 2D- och 3D-vägghoppimplementering i Unity?: I Unity använder 2D-fysik 'Physics2D'-metoder (som 'Physics2D.Raycast()'), medan 3D-fysik använder 'Physics' metoder (som 'Physics.Raycast()'). Logiken förblir relativt likartad, men metoder och riktningar (Vector2 för 2D, Vector3 för 3D) varierar.

Slutsats

Detta tillägg gör det möjligt för karaktären i 2D-utrymmet att hoppa av väggar. Experiment med kraftvärdena kan vara nödvändigt för att säkerställa smidigt spel. Genom att integrera dessa steg kommer spelare att tycka att 2D-karaktärens rörelse är mer mångsidig och dynamisk i miljöer med väggar.

Föreslagna artiklar
Dialogsystem för enhet
Top-Down Player Controller Handledning för Unity
RTS och MOBA Player Controller for Unity
Helikopterkontroller för Unity
Lägga till stöd för dubbla hopp till en 2D Platformer Character Controller i Unity
Bilkontroller för Unity
Flygplanskontroller för Unity