Implementazione del sistema Parkour in Unity

Il concetto di parkour, una disciplina di allenamento incentrata sul superamento di ostacoli fisici utilizzando il movimento, ha riscontrato un'immensa popolarità nei videogiochi, offrendo ai giocatori un'esperienza interattiva e coinvolgente ambiente. L'implementazione di questo sistema in Unity può migliorare l'esperienza di gioco. Questo tutorial ti guiderà attraverso il processo di configurazione di un sistema di parkour di base in Unity, concentrandosi sulla corsa sul muro e sul volteggio.

Risorse richieste

1. Organizzare la scena

  • Assicurati che l'ambiente abbia muri e ostacoli etichettati in modo appropriato, utilizzando "Wall" per i muri e "Obstacle" per gli ostacoli scavalcabili.

2. Modifica dello script 'SC_TPSController' per la corsa sui muri

2.1. Rilevamento di un muro:

  • Questo metodo controlla se il personaggio è accanto a un muro utilizzando il 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. Corsa sul muro

  • Questa coroutine gestisce la corsa sul muro.
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 il wall running nel metodo '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. Modifica di 'SC_TPSController' per il vaulting

3.1. Rilevamento di un ostacolo

  • Controlla la presenza di un ostacolo scavallabile di fronte al personaggio.
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. Voltaggio

  • Aggiungi un metodo di vaulting:
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 il vaulting nel metodo 'Update()':
// Vaulting
if (IsObstacleInFront() && Input.GetButton("Jump") && canMove && characterController.isGrounded)
{
    Vault();
}

Conclusione

Queste modifiche introdurranno le funzionalità di salto sui muri e di salto al controller del giocatore in terza persona esistente. Testa questi nuovi movimenti in vari scenari per assicurarti che funzionino come previsto. Potrebbero essere necessari aggiustamenti a seconda dell'ambiente specifico del gioco o della meccanica del parkour desiderata.

Articoli suggeriti
Tutorial per il salto a muro del giocatore 3D e 2D per Unity
Sistema di dialogo per l'unità
Creazione del movimento del giocatore in Unity
Aggiunta del supporto per il doppio salto a un controller di personaggi platform 2D in Unity
Controller per auto per Unity
Controller del personaggio Come aggiungere la capacità di spingere corpi rigidi in Unity
Come aggiungere il supporto della piattaforma mobile al controller del personaggio in Unity