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.