Agregar agacharse al reproductor FPS en Unity
Agregar un mecanismo agacharse puede profundizar la inmersión y proporcionar profundidad táctica al juego, especialmente en juegos en primera persona y basados en sigilo. Basándose en nuestro tutorial Unity Controlador FPS, esta guía muestra cómo agregar una función de agacharse suave en Unity.
Requisitos previos
- Familiaridad básica con la interfaz Unity .
- Comprensión del Unity 'CharacterController'.
- El script del controlador FPS del tutorial Unity FPS Controller.
Pasos
- En la clase llamada 'SC_FPSController', del tutorial Unity FPS Controller, agregue las siguientes variables para manejar el modo agachado:
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;
- Modifique el método 'Start()' para almacenar la altura original del 'CharacterController' y establezca las posiciones de la cámara:
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;
}
- En el método 'Update()', verifique que se presione la tecla agacharse y alterne 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;
}
}
- Fuera del bloque anterior, implemente la transición suave para la posición de la cámara entre agacharse y pararse:
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);
}
- Ajusta la velocidad de movimiento del jugador según el estado actual:
float curSpeedX = canMove ? (isRunning ? runningSpeed : (isCrouching ? crouchSpeed : walkingSpeed)) * Input.GetAxis("Vertical") : 0;
float curSpeedY = canMove ? (isRunning ? runningSpeed : (isCrouching ? crouchSpeed : walkingSpeed)) * Input.GetAxis("Horizontal") : 0;
Preguntas:
- ¿Por qué usar 'Vector3.Lerp()' para la transición de la cámara mientras estás agachado? : La función 'Vector3.Lerp()' se utiliza para interpolar suavemente entre dos vectores. En este contexto, permite que la cámara realice una transición fluida entre las posiciones de pie y agachada en lugar de dispararse abruptamente.
- ¿Cuál es la función de 'crouchTransitionSpeed'?: 'crouchTransitionSpeed' determina la rapidez con la que se produce la transición entre las posiciones de cámara agachada y parada. Un valor más alto da como resultado una transición más rápida.
- ¿Es posible personalizar la tecla de agacharse?: Absolutamente. La tecla de agacharse está actualmente configurada en 'C' ('KeyCode.C'). Reemplácelo con cualquier 'KeyCode' que desee para ajustar la tecla de agacharse.
Conclusión
Incorporar una mecánica suave de agacharse en Unity, que implica ajustar tanto el tamaño del colisionador como la posición de la cámara, puede elevar significativamente la inmersión del jugador. Esta guía ha proporcionado un método para lograr esto con una transición fluida y natural.