Implémentation du système Parkour dans Unity

Le concept du parkour, une discipline d'entraînement axée sur le dépassement des obstacles physiques par le mouvement, a connu une immense popularité dans les jeux vidéo, offrant aux joueurs un environnement interactif et engageant. La mise en œuvre de ce système dans Unity peut améliorer l'expérience de jeu. Ce didacticiel vous guidera tout au long du processus de mise en place d'un système de parkour de base dans Unity, en vous concentrant sur la course sur murs et les sauts.

Actifs requis

1. Planter le décor

  • Assurez-vous que l'environnement comporte des murs et des obstacles étiquetés de manière appropriée, en utilisant "Wall" pour les murs et "Obstacle" pour les obstacles pouvant être sautés.

2. Modification du script 'SC_TPSController' pour Wall Running

2.1. Détection d'un mur:

  • Cette méthode vérifie si le personnage est à côté d'un mur en utilisant 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. Courir sur le mur

  • Cette coroutine gère le fonctionnement des murs.
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.
}
  • Intégrez le courant de mur dans la méthode '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. Modification du 'SC_TPSController' pour Vaulting

3.1. Détecter un obstacle

  • Recherchez un obstacle pouvant être franchi devant le personnage.
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. Voûte

  • Ajoutez une méthode de stockage:
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.
}
  • Intégrez le stockage dans la méthode 'Update()':
// Vaulting
if (IsObstacleInFront() && Input.GetButton("Jump") && canMove && characterController.isGrounded)
{
    Vault();
}

Conclusion

Ces modifications introduiront des fonctionnalités de course sur mur et de saut au contrôleur de joueur à la troisième personne existant. Testez ces nouveaux mouvements dans divers scénarios pour vous assurer qu’ils fonctionnent comme prévu. Des ajustements peuvent être nécessaires en fonction de l'environnement spécifique du jeu ou des mécanismes de parkour souhaités.

Articles suggérés
Créer le mouvement des joueurs dans Unity
Comment contrôler la grue dans Unity
Système de dialogue pour l'unité
Ajout de la prise en charge du double saut à un contrôleur de personnage de plateforme 2D dans Unity
Contrôleur de voiture pour Unity
Contrôleur de personnage Comment ajouter la possibilité de pousser des corps rigides dans Unity
Ajout de Crouching au lecteur FPS dans Unity