Adicionando agachamento ao FPS Player no Unity

Adicionar um mecanismo agachado pode aprofundar a imersão e fornecer profundidade tática ao jogo, especialmente em jogos de primeira pessoa e baseados em furtividade. Com base em nosso tutorial Unity FPS Controller, este guia mostra como adicionar um recurso de agachamento suave em Unity.

Pré-requisitos

  • Familiaridade básica com a interface Unity .
  • Compreensão do Unity 'CharacterController'.
  • O script do controlador FPS do tutorial Unity FPS Controller.

Passos

  • Na class chamada 'SC_FPSController', do tutorial Unity FPS Controller, adicione as seguintes variáveis ​​para lidar com o agachamento:
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 o método 'Start()' para armazenar a altura original de 'CharacterController' e definir as posições da câmera:
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;
}
  • No método 'Update()', verifique se a tecla de agachamento foi pressionada e alterne a variável 'isCrouching':
if (Input.GetKeyDown(KeyCode.C) && canMove)
{
    isCrouching = !isCrouching;

    if (isCrouching)
    {
        characterController.height = crouchHeight;
        walkingSpeed = crouchSpeed;
    }
    else
    {
        characterController.height = originalHeight;
        walkingSpeed = 7.5f;
    }
}
  • Fora do bloco anterior, implemente a transição suave para a posição da câmera entre agachar e ficar em pé:
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);
}
  • Ajuste a velocidade de movimento do jogador com base no estado atual:
float curSpeedX = canMove ? (isRunning ? runningSpeed : (isCrouching ? crouchSpeed : walkingSpeed)) * Input.GetAxis("Vertical") : 0;
float curSpeedY = canMove ? (isRunning ? runningSpeed : (isCrouching ? crouchSpeed : walkingSpeed)) * Input.GetAxis("Horizontal") : 0;

Questões:

  1. Por que usar 'Vector3.Lerp()' para transição de câmera durante o agachamento?: A função 'Vector3.Lerp()' é utilizada para interpolar suavemente entre dois vetores. Neste contexto, permite que a câmera faça uma transição fluida entre as posições em pé e agachada, em vez de tirar fotos abruptamente.
  2. Qual é a função de 'crouchTransitionSpeed'?: O 'crouchTransitionSpeed' determina a rapidez com que ocorre a transição entre as posições da câmera agachada e em pé. Um valor mais alto resulta em uma transição mais rápida.
  3. É possível personalizar a tecla de agachamento?: Com certeza. A tecla de agachamento está atualmente definida como 'C' ('KeyCode.C'). Substitua-o por qualquer 'KeyCode' desejado para ajustar a tecla de agachamento.

Conclusão

Incorporar uma mecânica de agachamento suave em Unity, que envolve ajustar o tamanho do collider e a posição da câmera, pode aumentar significativamente a imersão do jogador. Este guia forneceu um método para conseguir isso com uma transição natural e fluida.

Artigos sugeridos
Controlador Unity FPS
Adicionando suporte de salto duplo a um controlador de personagem de plataforma 2D no Unity
Tutorial de salto de parede 3D e 2D do jogador para Unity
Criando movimento de jogadores no Unity
Controlador de player planetário baseado em corpo rígido para Unity
Adicionando efeito de balanço de cabeça à câmera no Unity
Tutorial de controlador de jogador de cima para baixo para Unity