Aggiunta dell'accovacciamento al lettore FPS in Unity

L'aggiunta di un meccanismo accovacciato può aumentare l'immersione e fornire profondità tattica al gameplay, specialmente nei giochi in prima persona e basati sullo stealth. Basandosi sul nostro tutorial Unity FPS Controller, questa guida mostra come aggiungere una funzione di accovacciamento uniforme in Unity.

Prerequisiti

  • Familiarità di base con l'interfaccia Unity .
  • Comprensione di Unity 'CharacterController'.
  • Lo script del controller FPS dal tutorial Unity FPS Controller.

Passi

  • Nella class denominata 'SC_FPSController', dal tutorial Unity FPS Controller, aggiungi le seguenti variabili per gestire l'accovacciamento:
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;
  • Modifica il metodo 'Start()' per memorizzare l'altezza originale di 'CharacterController' e impostare le posizioni della telecamera:
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;
}
  • Nel metodo 'Update()', controlla che sia premuto il tasto accovacciato e attiva/disattiva la variabile 'isCrouching':
if (Input.GetKeyDown(KeyCode.C) && canMove)
{
    isCrouching = !isCrouching;

    if (isCrouching)
    {
        characterController.height = crouchHeight;
        walkingSpeed = crouchSpeed;
    }
    else
    {
        characterController.height = originalHeight;
        walkingSpeed = 7.5f;
    }
}
  • Al di fuori del blocco precedente, implementa la transizione graduale per la posizione della telecamera tra accovacciata e in piedi:
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);
}
  • Regola la velocità di movimento del giocatore in base allo stato attuale:
float curSpeedX = canMove ? (isRunning ? runningSpeed : (isCrouching ? crouchSpeed : walkingSpeed)) * Input.GetAxis("Vertical") : 0;
float curSpeedY = canMove ? (isRunning ? runningSpeed : (isCrouching ? crouchSpeed : walkingSpeed)) * Input.GetAxis("Horizontal") : 0;

Domande:

  1. Perché utilizzare 'Vector3.Lerp()' per la transizione della telecamera mentre si è accovacciati?: la funzione 'Vector3.Lerp()' viene utilizzata per eseguire un'interpolazione uniforme tra due vettori. In questo contesto, consente alla fotocamera di passare fluidamente dalla posizione in piedi a quella accovacciata anziché scattare bruscamente.
  2. Qual è il ruolo di 'crouchTransitionSpeed'?: 'crouchTransitionSpeed' determina la velocità con cui avviene la transizione tra la posizione accovacciata e quella in piedi. Un valore più alto determina una transizione più rapida.
  3. È possibile personalizzare il tasto per abbassarsi?: Assolutamente. Il tasto abbassato è attualmente impostato su 'C' ('KeyCode.C'). Sostituiscilo con qualsiasi 'KeyCode' desiderato per regolare la chiave per accovacciarti.

Conclusione

Incorporare una meccanica di accovacciamento fluida in Unity, che comporta la regolazione sia delle dimensioni di collider che della posizione della telecamera, può aumentare significativamente l'immersione del giocatore. Questa guida ha fornito un metodo per raggiungere questo obiettivo con una transizione naturale e fluida.

Articoli suggeriti
Aggiunta del supporto per il doppio salto a un controller di personaggi platform 2D in Unity
Tutorial per il salto a muro del giocatore 3D e 2D per Unity
Controller FPS Unity
Aggiunta dell'effetto movimento della testa alla telecamera in Unity
Tutorial sul controller del lettore top-down per Unity
Controllore di elicottero per Unity
Controller del personaggio Come aggiungere la capacità di spingere corpi rigidi in Unity