Implementarea sistemului Parkour în Unity

Conceptul de parkour, o disciplină de antrenament axată pe depășirea obstacolelor fizice folosind mișcarea, a cunoscut o popularitate imensă în jocurile video, oferind jucătorilor un mediu interactiv și captivant. Implementarea acestui sistem în Unity poate îmbunătăți experiența de joc. Acest tutorial vă va ghida prin procesul de configurare a unui sistem de parkour de bază în Unity, concentrându-se pe alergarea pe perete și sărituri.

Bunuri necesare

1. Pregatind scena

  • Asigurați-vă că mediul înconjurător are pereți și obstacole etichetate corespunzător, folosind "Wall" pentru pereți și "Obstacle" pentru obstacolele cu boltă.

2. Modificarea scriptului 'SC_TPSController' pentru Wall Running

2.1. Detectarea unui zid:

  • Această metodă verifică dacă personajul se află lângă un perete folosind raycasting.
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. Alergarea pe perete

  • Această corutine se ocupă de alergarea pe perete.
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.
}
  • Integrați rularea peretelui în metoda 'Update()':
// 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. Modificarea 'SC_TPSController' pentru Volting

3.1. Detectarea unui obstacol

  • Verificați dacă există un obstacol sărit în fața personajului.
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. Boltire

  • Adăugați o metodă de salt:
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.
}
  • Integrați boltirea în metoda 'Update()':
// Vaulting
if (IsObstacleInFront() && Input.GetButton("Jump") && canMove && characterController.isGrounded)
{
    Vault();
}

Concluzie

Aceste modificări vor introduce funcționalități de alergare pe perete și vault la controlerul de jucător de la persoana a treia existent. Testați aceste mișcări noi în diferite scenarii pentru a vă asigura că funcționează conform intenției. Pot fi necesare ajustări în funcție de mediul specific al jocului sau de mecanica parkour-ului dorită.

Articole sugerate
Crearea mișcării jucătorilor în Unity
Adăugarea suportului pentru salt dublu la un controler de caractere 2D platformer în Unity
Cum să faci controlul macaralei în Unity
Controler auto pentru Unity
Controler de caractere Cum să adăugați capacitatea de a împinge corpuri rigide în Unity
Adăugarea ghemuirii la FPS Player în Unity
Player 3D și 2D Wall Jump Tutorial pentru Unity