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

  • Ein grundlegender Charakter-Controller: Wir werden einen Spieler-Controller aus der Third-Person-Kamera in Unity als Basisklasse für Modifikationen verwenden.
  • Parkour-Animationen: Wandlaufen, Voltigieren usw.

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.