Implementierung des Parkour-Systems in Unity

Das Konzept von Parkour, einer Trainingsdisziplin, die sich auf die Überwindung physischer Hindernisse durch Bewegung konzentriert, erfreut sich in Videospielen großer Beliebtheit und bietet Spielern eine interaktive und ansprechende Umgebung. Die Implementierung dieses Systems in Unity kann das Spielerlebnis verbessern. Dieses Tutorial führt Sie durch den Prozess der Einrichtung eines grundlegenden Parkour-Systems in Unity und konzentriert sich dabei auf das Laufen an der Wand und das Voltigieren.

Erforderliche Vermögenswerte

1. Die Szene festlegen

  • Stellen Sie sicher, dass die Umgebung über Wände und Hindernisse verfügt, die entsprechend gekennzeichnet sind, indem Sie "Wall" für Wände und "Obstacle" für überspringbare Hindernisse verwenden.

2. Ändern des 'SC_TPSController'-Skripts für Wall Running

2.1. Erkennen einer Wand:

  • Diese Methode prüft mithilfe von raycasting, ob sich der Charakter neben einer Wand befindet.
bool IsBesideWall(Vector3 direction)
{
    RaycastHit hit;
    if (Physics.Raycast(transform.position, direction, out hit, 1f))
    {
        if (hit.transform.CompareTag("Wall"))
        {
            return true;
        }
    }
    return false;
}

2.2. Wandlauf

  • Diese Coroutine übernimmt das Laufen an der Wand.
public float wallRunTime = 2f; // Duration of the wall run.

IEnumerator WallRun(Vector3 direction)
{
    float startTime = Time.time;
    canMove = false; // Disable regular movement during wall run.

    while (Time.time - startTime < wallRunTime)
    {
        characterController.Move(direction * speed * Time.deltaTime);
        yield return null;
    }

    canMove = true; // Enable regular movement after wall run.
}
  • Wandlauf in die Methode 'Update()' integrieren:
// Wall Run
if (IsBesideWall(transform.right) && Input.GetButton("Jump") && canMove && !characterController.isGrounded)
{
    StartCoroutine(WallRun(transform.right));
}
else if (IsBesideWall(-transform.right) && Input.GetButton("Jump") && canMove && !characterController.isGrounded)
{
    StartCoroutine(WallRun(-transform.right));
}

3. 'SC_TPSController' für Voltigieren ändern

3.1. Erkennen eines Hindernisses

  • Suchen Sie nach einem überspringbaren Hindernis vor dem Charakter.
bool IsObstacleInFront()
{
    RaycastHit hit;
    if (Physics.Raycast(transform.position, transform.forward, out hit, 1.5f))
    {
        if (hit.transform.CompareTag("Obstacle"))
        {
            return true;
        }
    }
    return false;
}

3.2. Gewölbe

  • Fügen Sie eine Vaulting-Methode hinzu:
void Vault()
{
    canMove = false; // Disable regular movement during vaulting.
    
    // Translate the player over the obstacle.
    Vector3 vaultMovement = (Vector3.up + transform.forward) * speed * Time.deltaTime;
    characterController.Move(vaultMovement);
    
    canMove = true; // Enable regular movement after vaulting.
}
  • Integrieren Sie das Voltigieren in die Methode 'Update()':
// Vaulting
if (IsObstacleInFront() && Input.GetButton("Jump") && canMove && characterController.isGrounded)
{
    Vault();
}

Abschluss

Durch diese Änderungen werden dem bestehenden Third-Person-Player-Controller Wandlauf- und Sprungfunktionen hinzugefügt. Testen Sie diese neuen Bewegungen in verschiedenen Szenarien, um sicherzustellen, dass sie wie beabsichtigt funktionieren. Abhängig von der spezifischen Spielumgebung oder der gewünschten Parkour-Mechanik können Anpassungen erforderlich sein.

Empfohlene Artikel
Auto-Controller für Unity
Spieler-3D- und 2D-Wandsprung-Tutorial für Unity
Spielerbewegung in Einheit schaffen
Hubschrauber-Controller für Unity
So erstellen Sie eine Kransteuerung in Unity
Charakter-Controller So fügen Sie die Fähigkeit hinzu, starre Körper in Einheit zu schieben
Flugzeugcontroller für Unity