Como criar um movimento suave do mouse no Unity
O movimento suave do mouse é um aspecto essencial do desenvolvimento de jogos que ajuda a melhorar a experiência geral do usuário. Ao implementar o movimento suave do mouse, você pode fazer com que os controles de câmera ou jogador do seu jogo pareçam mais fluidos e responsivos, resultando em uma experiência de jogo polida e envolvente. Neste tutorial, mostraremos como configurar o movimento suave do mouse em Unity, com instruções passo a passo e exemplos de código em C#. Também discutiremos os possíveis motivos pelos quais você deseja implementar esse recurso em seus jogos.
Por que implementar o movimento suave do mouse?
Aqui estão alguns motivos pelos quais o movimento suave do mouse é importante nos jogos:
- Experiência do usuário aprimorada: Controles suaves ajudam o jogador a se sentir mais no controle de suas ações, o que é essencial para a imersão, especialmente em jogos de primeira ou terceira pessoa.
- Precisão aprimorada: O ajuste fino do movimento do mouse permite controles de câmera mais precisos, o que é crucial em jogos de tiro ou quaisquer jogos que envolvam mira cuidadosa.
- Aparência e comportamento refinados: Faz com que o jogo pareça mais profissional e refinado, o que é essencial para reter jogadores e mantê-los engajados.
- Reduz o enjoo de movimento: Movimentos de câmera nervosos ou excessivamente sensíveis podem causar desconforto ou enjoo de movimento para os jogadores. Movimentos suaves do mouse podem ajudar a reduzir esse risco.
Configurando o movimento suave do mouse em Unity
Vamos seguir os passos para criar um movimento suave do mouse em Unity.
Etapa 1: Crie um novo script
Primeiro, crie um novo script C# que controlará o movimento do mouse. Você pode nomear esse script como MouseLook
.
using UnityEngine;
public class MouseLook : MonoBehaviour
{
public float mouseSensitivity = 100f;
public Transform playerBody;
private float xRotation = 0f;
void Start()
{
// Lock the cursor in the middle of the screen
Cursor.lockState = CursorLockMode.Locked;
}
void Update()
{
// Get mouse movement input
float mouseX = Input.GetAxis("Mouse X") * mouseSensitivity * Time.deltaTime;
float mouseY = Input.GetAxis("Mouse Y") * mouseSensitivity * Time.deltaTime;
// Invert the Y-axis for a more natural control feel
xRotation -= mouseY;
xRotation = Mathf.Clamp(xRotation, -90f, 90f);
// Rotate the camera around the X-axis (up and down)
transform.localRotation = Quaternion.Euler(xRotation, 0f, 0f);
// Rotate the player object around the Y-axis (left and right)
playerBody.Rotate(Vector3.up * mouseX);
}
}
Neste código:
mouseSensitivity
controla o quão sensível é a entrada do mouse.playerBody
representa a transformação do jogador, que gira ao longo do eixo Y para movimento horizontal do mouse.- A variável
xRotation
armazena a rotação vertical atual (para cima e para baixo) e é fixada entre -90 e 90 graus para evitar rotação excessiva. - Travamos o cursor do mouse no centro da tela para evitar que ele saia da janela do jogo.
Etapa 2: Anexe o script à câmera
Agora que o script está pronto, vá para sua cena Unity e anexe o script MouseLook
à sua câmera (por exemplo, o objeto Main Camera
).
Em seguida, atribua o campo playerBody
arrastando o objeto do jogador (geralmente o controlador do personagem ou um objeto de jogo vazio representando o jogador) para o campo Player Body
do script no Inspetor.
Etapa 3: ajuste a sensibilidade do mouse
Você pode experimentar o valor mouseSensitivity
para atingir o nível de controle que deseja. Um bom ponto de partida é 100, mas você pode ajustá-lo para mais ou para menos, dependendo do seu nível de precisão desejado.
Etapa 4: Lidando com a suavidade da entrada
Para um movimento ainda mais suave, você pode aplicar interpolação aos valores de entrada do mouse. Isso garante que a câmera faça a transição suavemente entre cada quadro, em vez de pular de uma posição para a outra. Aqui está um exemplo de como implementar isso:
using UnityEngine;
public class MouseLook : MonoBehaviour
{
public float mouseSensitivity = 100f;
public Transform playerBody;
private float xRotation = 0f;
private Vector2 smoothInputVelocity;
public float smoothTime = 0.1f;
private Vector2 currentMouseDelta;
void Start()
{
Cursor.lockState = CursorLockMode.Locked;
}
void Update()
{
// Get raw mouse input
Vector2 targetMouseDelta = new Vector2(Input.GetAxis("Mouse X"), Input.GetAxis("Mouse Y")) * mouseSensitivity;
// Smooth the mouse input
currentMouseDelta = Vector2.SmoothDamp(currentMouseDelta, targetMouseDelta, ref smoothInputVelocity, smoothTime);
xRotation -= currentMouseDelta.y * Time.deltaTime;
xRotation = Mathf.Clamp(xRotation, -90f, 90f);
transform.localRotation = Quaternion.Euler(xRotation, 0f, 0f);
playerBody.Rotate(Vector3.up * currentMouseDelta.x * Time.deltaTime);
}
}
Esta versão atualizada introduz suavização usando Vector2.SmoothDamp
. A variável smoothTime
controla o quão suave a transição deve ser. Valores mais baixos tornam o movimento mais responsivo, enquanto valores mais altos o tornam mais lento e gradual.
Etapa 5: Teste e ajuste fino
Depois que você tiver o script no lugar, teste o jogo e ajuste os valores de sensibilidade e suavização com base em quão suave você quer que o movimento do mouse seja. Você também pode ajustar o ângulo de fixação para permitir mais ou menos liberdade de movimento da câmera.
Conclusão
Ao implementar o movimento suave do mouse no seu projeto Unity, você pode melhorar significativamente a experiência do jogador ao oferecer controle de câmera preciso e fluido. Este tutorial o guiou pela configuração de um sistema básico de movimento do mouse e o aprimorou com técnicas de suavização.