Moviendo las piezas

Clase 12 de 34Curso de Desarrollo de Videojuegos Móviles con Unity

Resumen

Agregar movimiento suave y profesional a las piezas de un juego en Unity es más sencillo de lo que parece cuando se utiliza la herramienta adecuada. En esta ocasión se implementa la capacidad de movimiento usando DOTween, un asset gratuito disponible en la tienda de Unity que permite animar objetos con pocas líneas de código y resultados visualmente atractivos.

¿Cómo instalar y configurar DOTween en tu proyecto de Unity?

El primer paso es obtener el asset desde la tienda de Unity. Buscando "DOTween Unity" en Google, el resultado correcto es DOTween (HOTween v2), listado como herramienta de animación [0:14]. Es necesario tener la sesión de Unity iniciada para poder agregar el asset a tu cuenta con el botón "Add to My Assets".

Una vez agregado, el botón cambia a "Open in Unity" [0:36]. Al hacer clic, el navegador pregunta si deseas abrir Unity; al confirmar, se abre el Package Manager dentro del editor. Desde ahí se importa el asset haciendo clic en "Import" y luego confirmando la lista de scripts y archivos que se agregarán al proyecto [0:56].

Después de la importación, es obligatorio realizar el setup de DOTween. Esto se hace desde el menú Tools > DOTween Utility Panel, donde aparece un botón de "Setup DOTween" [1:18]. Al ejecutarlo, Unity procesa los archivos necesarios para que la librería funcione correctamente.

¿Cómo crear la función de movimiento con DOTween?

Con DOTween configurado, el trabajo se traslada al script de la pieza. Lo primero es importar la librería añadiendo using DG.Tweening; al inicio del archivo [1:52]. Esta línea da acceso a las funcionalidades de animación que DOTween ofrece.

La función de movimiento se define como public void Move(int desX, int desY) y recibe dos parámetros: la posición destino en el eje X y en el eje Y [1:42]. Dentro de ella se utiliza el método DoMove, que es la pieza central de DOTween para trasladar objetos:

csharp using DG.Tweening;

public void Move(int desX, int desY) { transform.DOMove(new Vector3(desX, desY, -5), 0.25f) .SetEase(Ease.InOutCubic) .OnComplete(() => { x = desX; y = desY; }); }

  • DoMove recibe un Vector3 con la posición destino y un flotante que representa la duración del movimiento en segundos [2:12].
  • SetEase permite encadenar un tipo de easing al movimiento. En este caso se usa Ease.InOutCubic, que aplica aceleración y desaceleración para que el desplazamiento se vea natural en lugar de lineal [2:30].
  • OnComplete es un callback que se ejecuta cuando la animación termina. Aquí se actualizan las variables internas x e y con la nueva posición de la pieza [2:48].

El concepto de encadenamiento de funciones (method chaining) es fundamental: cada método devuelve el mismo objeto, lo que permite llamar a .SetEase() y .OnComplete() uno tras otro en la misma instrucción.

¿Cómo probar el movimiento rápidamente con ContextMenu?

Para verificar que todo funciona sin necesidad de escribir lógica de juego adicional, se crea una función auxiliar llamada MoveTest [3:14]:

csharp [ContextMenu("test move")] public void MoveTest() { Move(0, 0); }

El decorador ContextMenu agrega una opción al menú contextual del componente en el inspector de Unity. Al hacer clic derecho (o en los tres puntos del componente), aparece la opción "test move" [3:42]. Este patrón es muy útil para probar funcionalidades rápidamente durante el desarrollo; la única restricción es que la función decorada no debe recibir parámetros.

Al presionar Play y seleccionar una pieza, ejecutar "test move" desde el menú contextual mueve la pieza hacia la posición (0, 0) en solo 0.25 segundos [4:02]. El movimiento es rápido pero suave gracias al easing aplicado.

¿Qué sigue después de implementar el movimiento?

Con las piezas capaces de moverse, el siguiente desafío es controlar cuándo y hacia dónde se desplazan. Esto implica conectar la lógica de entrada del jugador con la función Move. ¿Tienes alguna idea de cómo implementarlo? Compártela en los comentarios.

      Moviendo las piezas