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:
- 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.
- 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.
- É 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.