Cómo crear un movimiento suave del ratón en Unity
El movimiento suave del mouse es un aspecto esencial del desarrollo de juegos que ayuda a mejorar la experiencia general del usuario. Al implementar un movimiento suave del mouse, puede hacer que la cámara o los controles del jugador de su juego se sientan más fluidos y receptivos, lo que da como resultado una experiencia de juego pulida e inmersiva. En este tutorial, le mostraremos cómo configurar el movimiento suave del mouse en Unity, con instrucciones paso a paso y ejemplos de código en C#. También analizaremos las posibles razones por las que querría implementar esta función en sus juegos.
¿Por qué implementar un movimiento suave del mouse?
A continuación se presentan algunas razones por las que el movimiento suave del mouse es importante en los juegos:
- Experiencia de usuario mejorada: Los controles suaves ayudan al jugador a sentirse más en control de sus acciones, lo cual es esencial para la inmersión, especialmente en juegos en primera o tercera persona.
- Precisión mejorada: El ajuste fino del movimiento del mouse permite controles de cámara más precisos, lo cual es crucial en juegos de disparos o cualquier juego que requiera una puntería cuidadosa.
- Aspecto y sensación mejorados: Hace que el juego se sienta más profesional y pulido, lo cual es esencial para retener a los jugadores y mantenerlos interesados.
- Reduce el mareo por movimiento: Un movimiento de cámara inestable o demasiado sensible puede provocar incomodidad o mareo por movimiento en los jugadores. Un movimiento suave del mouse puede ayudar a reducir este riesgo.
Configuración de un movimiento suave del ratón en Unity
Repasemos los pasos para crear un movimiento suave del mouse en Unity.
Paso 1: Crear un nuevo script
Primero, crea un nuevo script en C# que controle el movimiento del mouse. Puedes nombrar este script de una manera similar a 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);
}
}
En este código:
mouseSensitivity
controla qué tan sensible es la entrada del mouse.playerBody
representa la transformación del jugador, que gira a lo largo del eje Y para el movimiento horizontal del mouse.- La variable
xRotation
almacena la rotación vertical actual (arriba y abajo) y está fijada entre -90 y 90 grados para evitar una rotación excesiva. - Bloqueamos el cursor del ratón en el centro de la pantalla para evitar que el cursor se mueva fuera de la ventana del juego.
Paso 2: Adjunte el guión a la cámara
Ahora que el script está listo, vaya a su escena Unity y adjunte el script MouseLook
a su cámara (por ejemplo, el objeto Main Camera
).
Luego, asigne el campo playerBody
arrastrando el objeto de jugador (generalmente el controlador de personaje o un objeto de juego vacío que representa al jugador) al campo Player Body
del script en el Inspector.
Paso 3: Ajustar la sensibilidad del ratón
Puedes experimentar con el valor mouseSensitivity
para lograr el nivel de control que deseas. Un buen punto de partida es 100, pero puedes ajustarlo a un valor más alto o más bajo según el nivel de precisión que desees.
Paso 4: Manejo de la suavidad de entrada
Para lograr un movimiento aún más fluido, puede aplicar interpolación a los valores de entrada del mouse. Esto garantiza que la cámara realice una transición fluida entre cada cuadro, en lugar de saltar de una posición a la siguiente. A continuación, se muestra un ejemplo de cómo implementarlo:
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 versión actualizada introduce el suavizado mediante Vector2.SmoothDamp
. La variable smoothTime
controla qué tan suave debe ser la transición. Los valores más bajos hacen que el movimiento sea más sensible, mientras que los valores más altos lo hacen más lento y gradual.
Paso 5: Pruebas y ajustes
Una vez que tengas el script listo, prueba el juego y ajusta los valores de sensibilidad y suavizado según lo suave que quieras que sea el movimiento del mouse. También puedes ajustar el ángulo de sujeción para permitir más o menos libertad de movimiento de la cámara.
Conclusión
Al implementar un movimiento suave del mouse en su proyecto Unity, puede mejorar significativamente la experiencia del jugador al ofrecer un control de cámara preciso y fluido. Este tutorial lo guió a través de la configuración de un sistema básico de movimiento del mouse y su mejora con técnicas de suavizado.