Tutoriel Player 3D et 2D Wall Jump pour Unity

Le saut de mur, une mécanique répandue dans les jeux de plateforme et d'action, permet aux joueurs de sauter des murs, ajoutant ainsi complexité et polyvalence à la navigation. Ce tutoriel vise à intégrer le saut de mur dans le contrôleur FPS fourni. À la fin, le personnage du joueur sera capable d'exécuter des sauts muraux dans des environnements 2D et 3D.

Implémentation de Wall Jump pour la 3D à l'aide du script 'SC_FPSController'

En commençant par le code de base donné dans le didacticiel Unity FPS Controller, nous présenterons le mécanisme de saut de mur.

Étape 1: Configuration de la détection de mur

  • Ajoutez un nouveau calque dans Unity nommé "Wall" pour les objets pouvant être sautés d'un mur.
  • Mettez à jour la classe 'SC_FPSController', que vous pouvez obtenir à partir de notre tutoriel Unity FPS Controller, avec les variables suivantes:
public LayerMask wallLayer;
public float wallJumpForce = 10f;
private bool isTouchingWall = false;

Étape 2: Détection du mur

  • Incorporez la logique suivante dans la méthode 'Update()' pour détecter un mur:
RaycastHit hit;
if (Physics.Raycast(transform.position, transform.right, out hit, 1f, wallLayer) || Physics.Raycast(transform.position, -transform.right, out hit, 1f, wallLayer))
{
    isTouchingWall = true;
}
else
{
    isTouchingWall = false;
}

Ce raycast dans le code ci-dessus détectera les murs à gauche et à droite du joueur.

Étape 3: Implémentation du Wall Jump pour la 3D

  • Dans la méthode 'Update()', après la logique de saut au sol, insérez:
else if (Input.GetButton("Jump") && canMove && isTouchingWall)
{
    moveDirection.y = wallJumpForce;

    // This adds a bit of horizontal force opposite the wall for a more dynamic jump
    if (Physics.Raycast(transform.position, transform.right, 1f, wallLayer))
    {
        moveDirection += -transform.right * wallJumpForce / 2.5f; // Adjust the divisor for stronger/weaker push.
    }
    else if (Physics.Raycast(transform.position, -transform.right, 1f, wallLayer))
    {
        moveDirection += transform.right * wallJumpForce / 2.5f;
    }
}

Cette logique dans le code ci-dessus vérifie si le joueur appuie sur le bouton de saut, peut bouger et touche un mur. Si tel est le cas, cela transmet une force verticale et une légère force horizontale à l’écart du mur.

Implémentation de Wall Jump pour la 2D à l'aide du script 'CharacterController2D'

En commençant par le code de base donné du didacticiel 2D Character Controller pour Unity, nous présenterons le mécanisme wall jump.

Étape 1: Configuration de la détection de mur

  • Ajoutez un nouveau calque dans Unity nommé "Wall" pour les objets pouvant être sautés d'un mur.
  • Mettez à jour la classe 'CharacterController2D', que vous pouvez obtenir à partir de notre didacticiel 2D Character Controller pour Unity, avec les variables suivantes:
public LayerMask wallLayer;
public float wallJumpForce = 10f;
private bool isTouchingWall = false;

Étape 2: Détection du mur en 2D

  • Incorporez la logique suivante dans la méthode 'Update()' pour détecter un mur:
RaycastHit2D wallHitLeft = Physics2D.Raycast(transform.position, Vector2.left, 1f, wallLayer);
RaycastHit2D wallHitRight = Physics2D.Raycast(transform.position, Vector2.right, 1f, wallLayer);

if (wallHitLeft.collider != null || wallHitRight.collider != null)
{
    isTouchingWall = true;
}
else
{
    isTouchingWall = false;
}

Étape 3: Implémentation du Wall Jump pour la 2D

  • Dans la méthode 'Update()', après la logique de saut au sol, insérez:
if (Input.GetKeyDown(KeyCode.W) && isTouchingWall && !isGrounded)
{
    r2d.velocity = new Vector2(r2d.velocity.x, jumpHeight);
    if (wallHitLeft.collider != null)
    {
        r2d.AddForce(new Vector2(wallJumpForce, 0)); // Push to the right when wall is on the left
    }
    else if (wallHitRight.collider != null)
    {
        r2d.AddForce(new Vector2(-wallJumpForce, 0)); // Push to the left when wall is on the right
    }
}

Questions abordées:

  1. Comment un personnage peut-il détecter un mur en Unity ?: Un personnage peut détecter les murs en utilisant raycasting. En tirant un rayon invisible depuis le joueur dans la direction souhaitée, on peut déterminer si un objet, comme un mur, croise ce rayon.
  2. Quelle est la différence entre l'implémentation de sauts de mur 2D et 3D dans Unity ?: Dans Unity, la physique 2D utilise les méthodes 'Physics2D' (comme 'Physics2D.Raycast()'), tandis que la physique 3D utilise les méthodes 'Physics' (comme 'Physics.Raycast()'). La logique reste relativement similaire, mais les méthodes et orientations (Vector2 pour la 2D, Vector3 pour la 3D) varient.

Conclusion

Cet ajout permet au personnage dans l'espace 2D de sauter des murs. L'expérimentation des valeurs de force peut être nécessaire pour garantir un gameplay fluide. En intégrant ces étapes, les joueurs trouveront le mouvement du personnage 2D plus polyvalent et dynamique dans les environnements avec des murs.

Articles suggérés
Tutoriel de contrôleur de lecteur descendant pour Unity
Ajout de la prise en charge du double saut à un contrôleur de personnage de plateforme 2D dans Unity
Implémentation du système Parkour dans Unity
Tutoriel lampe de poche pour Unity
Tutoriel sur le contrôleur de ver 3D pour Unity
Contrôleur de lecteur planétaire basé sur Rigidbody pour Unity
Contrôleur de personnages 2D pour Unity