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.