Ajout de Crouching au lecteur FPS dans Unity

L'ajout d'un mécanisme accroupi peut approfondir l'immersion et apporter une profondeur tactique au gameplay, en particulier dans les jeux à la première personne et furtifs. S'appuyant sur notre didacticiel Unity FPS Controller, ce guide montre comment ajouter une fonction d'accroupissement fluide dans Unity.

Conditions préalables

  • Familiarité de base avec l'interface Unity .
  • Compréhension du Unity 'CharacterController'.
  • Le script du contrôleur FPS du didacticiel Unity FPS Controller.

Pas

  • Dans la class nommée 'SC_FPSController', du didacticiel Unity FPS Controller, ajoutez les variables suivantes pour gérer le fait de s'accroupir:
public bool isCrouching = false;
public float crouchHeight = 0.5f;
public float crouchSpeed = 3.5f;
public float crouchTransitionSpeed = 10f;
private float originalHeight;
public float crouchCameraOffset = -0.5f;
private Vector3 cameraStandPosition;
private Vector3 cameraCrouchPosition;
  • Modifiez la méthode 'Start()' pour stocker la hauteur d'origine du 'CharacterController' et définir les positions de la caméra:
void Start()
{
    characterController = GetComponent<CharacterController>();
    originalHeight = characterController.height;

    // Define camera positions for standing and crouching
    cameraStandPosition = playerCamera.transform.localPosition;
    cameraCrouchPosition = cameraStandPosition + new Vector3(0, crouchCameraOffset, 0);

    // Lock cursor
    Cursor.lockState = CursorLockMode.Locked;
    Cursor.visible = false;
}
  • Dans la méthode 'Update()', vérifiez la touche accroupie et activez la variable 'isCrouching':
if (Input.GetKeyDown(KeyCode.C) && canMove)
{
    isCrouching = !isCrouching;

    if (isCrouching)
    {
        characterController.height = crouchHeight;
        walkingSpeed = crouchSpeed;
    }
    else
    {
        characterController.height = originalHeight;
        walkingSpeed = 7.5f;
    }
}
  • En dehors du bloc précédent, implémentez la transition en douceur de la position de la caméra entre accroupi et debout:
if (isCrouching)
{
    playerCamera.transform.localPosition = Vector3.Lerp(playerCamera.transform.localPosition, cameraCrouchPosition, crouchTransitionSpeed * Time.deltaTime);
}
else
{
    playerCamera.transform.localPosition = Vector3.Lerp(playerCamera.transform.localPosition, cameraStandPosition, crouchTransitionSpeed * Time.deltaTime);
}
  • Ajustez la vitesse de déplacement du joueur en fonction de l'état actuel:
float curSpeedX = canMove ? (isRunning ? runningSpeed : (isCrouching ? crouchSpeed : walkingSpeed)) * Input.GetAxis("Vertical") : 0;
float curSpeedY = canMove ? (isRunning ? runningSpeed : (isCrouching ? crouchSpeed : walkingSpeed)) * Input.GetAxis("Horizontal") : 0;

Des questions:

  1. Pourquoi utiliser 'Vector3.Lerp()' pour la transition de caméra en position accroupie ?: La fonction 'Vector3.Lerp()' est utilisée pour interpoler en douceur entre deux vecteurs. Dans ce contexte, cela permet à la caméra de passer de manière fluide entre les positions debout et accroupie plutôt que de prendre des photos brusquement.
  2. Quel est le rôle de 'crouchTransitionSpeed' ?: Le 'crouchTransitionSpeed' détermine la rapidité avec laquelle la transition entre les positions accroupie et debout de la caméra s'effectue. Une valeur plus élevée entraîne une transition plus rapide.
  3. Est-il possible de personnaliser la touche accroupie ?: Absolument. La touche accroupie est actuellement réglée sur 'C' ('KeyCode.C'). Remplacez-le par n'importe quel 'KeyCode' souhaité pour ajuster la touche accroupie.

Conclusion

L’intégration d’un mécanisme d’accroupissement fluide dans Unity, qui implique d’ajuster à la fois la taille du collider et la position de la caméra, peut améliorer considérablement l’immersion du joueur. Ce guide a fourni une méthode pour y parvenir avec une transition naturelle et fluide.

Articles suggérés
Ajout de la prise en charge du double saut à un contrôleur de personnage de plateforme 2D dans Unity
Contrôleur de personnage Comment ajouter la possibilité de pousser des corps rigides dans Unity
Tutoriel Player 3D et 2D Wall Jump pour Unity
Contrôleur FPS Unity
Ajout d'un effet de mouvement de tête à la caméra dans Unity
Tutoriel de contrôleur de lecteur descendant pour Unity
Contrôleur d'hélicoptère pour Unity