Spieler-3D- und 2D-Wandsprung-Tutorial für Unity

Wandspringen, eine in Plattformspielen und Actionspielen weit verbreitete Mechanik, ermöglicht es Spielern, von Wänden zu springen, was die Navigation komplexer und vielseitiger macht. Dieses Tutorial zielt darauf ab, Wandsprünge in den bereitgestellten FPS-Controller zu integrieren. Am Ende wird der Spielercharakter in der Lage sein, Wandsprünge sowohl in 2D- als auch in 3D-Einstellungen auszuführen.

Implementierung von Wall Jump für 3D mit dem 'SC_FPSController'-Skript

Beginnend mit dem gegebenen Basiscode aus dem Unity FPS Controller Tutorial stellen wir die Wandsprung-Mechanik vor.

Schritt 1: Wanderkennung einrichten

  • Fügen Sie in Unity eine neue Ebene mit dem Namen "Wall" für Objekte hinzu, von denen Sie an der Wand herunterspringen können.
  • Aktualisieren Sie die Klasse 'SC_FPSController', die Sie in unserem Tutorial zum Unity FPS Controller erhalten können, mit den folgenden Variablen:
public LayerMask wallLayer;
public float wallJumpForce = 10f;
private bool isTouchingWall = false;

Schritt 2: Erkennen der Wand

  • Integrieren Sie die folgende Logik in die Methode 'Update()', um eine Wand zu erkennen:
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;
}

Dieser Raycast im obigen Code erkennt Wände links und rechts vom Spieler.

Schritt 3: Implementierung des Wall Jump für 3D

  • Fügen Sie innerhalb der Methode 'Update()' nach der Ground-Jump-Logik Folgendes ein:
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;
    }
}

Diese Logik im obigen Code prüft, ob der Spieler die Sprungtaste drückt, sich bewegen kann und eine Wand berührt. Wenn ja, übt es eine vertikale Kraft und eine leichte horizontale Kraft von der Wand weg aus.

Implementieren von Wall Jump für 2D mit dem 'CharacterController2D'-Skript

Beginnend mit dem gegebenen Basiscode aus dem Tutorial 2D Character Controller für Unity stellen wir die Mechanik Wandsprung vor.

Schritt 1: Wanderkennung einrichten

  • Fügen Sie in Unity eine neue Ebene mit dem Namen "Wall" für Objekte hinzu, von denen Sie an der Wand herunterspringen können.
  • Aktualisieren Sie die Klasse 'CharacterController2D', die Sie in unserem Tutorial 2D Character Controller für Unity erhalten können, mit den folgenden Variablen:
public LayerMask wallLayer;
public float wallJumpForce = 10f;
private bool isTouchingWall = false;

Schritt 2: Erkennen der Wand in 2D

  • Integrieren Sie die folgende Logik in die Methode 'Update()', um eine Wand zu erkennen:
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;
}

Schritt 3: Implementierung des Wall Jump für 2D

  • Fügen Sie innerhalb der Methode 'Update()' nach der Ground-Jump-Logik Folgendes ein:
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
    }
}

Beantwortete Fragen:

  1. Wie kann ein Charakter eine Wand in Unity erkennen?: Ein Charakter kann Wände mithilfe von raycasting erkennen. Indem man einen unsichtbaren Strahl des Spielers in die gewünschte Richtung schießt, kann man feststellen, ob ein Objekt, wie eine Wand, diesen Strahl schneidet.
  2. Was ist der Unterschied zwischen der 2D- und 3D-Wandsprung-Implementierung in Unity?: In Unity verwendet die 2D-Physik 'Physics2D' Methoden (wie 'Physics2D.Raycast()'), während die 3D-Physik 'Physics'-Methoden verwendet (wie 'Physics.Raycast()'). Die Logik bleibt relativ ähnlich, aber Methoden und Richtungen (Vector2 für 2D, Vector3 für 3D) variieren.

Abschluss

Dieser Zusatz ermöglicht es dem Charakter im 2D-Raum, von Wänden zu springen. Um ein reibungsloses Gameplay zu gewährleisten, kann es notwendig sein, mit den Kraftwerten zu experimentieren. Durch die Integration dieser Schritte werden Spieler feststellen, dass die Bewegung des 2D-Charakters in Umgebungen mit Wänden vielseitiger und dynamischer ist.

Empfohlene Artikel
RTS- und MOBA-Player-Controller für Unity
Hubschrauber-Controller für Unity
Auto-Controller für Unity
Flugzeugcontroller für Unity
Dialogsystem für Einheit
Taschenlampen-Tutorial für Unity
3D-Wurm-Controller-Tutorial für Unity