Tutorial Tetris en Unity (Parte 2): Control de Tetrominos y Rotación (`Shape.cs` y `Vectorf.cs`)

Cómo Crear un Juego de Tetris en Unity
(Parte 2: Control de Piezas y Rotación)

En la primera entrega configuramos el tablero base y la matriz de datos. ¡Ahora toca dar vida a los bloques! En esta segunda parte aprenderemos a gestionar el movimiento horizontal, la caída vertical, la rotación de los tetrominos y una clase auxiliar de redondeo matemático.

1. ¿Por qué necesitamos una clase de redondeo (`Vectorf.cs`)?

Cuando los objetos rotan en Unity mediante transformaciones 2D, sus coordenadas suelen generar decimales flotantes (por ejemplo, `x = 3.0001`). Como nuestro tablero trabaja con una matriz discreta de enteros, necesitamos forzar los valores al número entero más cercano para evitar desalineaciones con las celdas.

Crea un script llamado Vectorf.cs con el siguiente código estático:

using UnityEngine; public class Vectorf { public static Vector2 Round(Vector2 v) { return new Vector2(Mathf.Round(v.x), Mathf.Round(v.y)); } }

2. Programando el comportamiento de las fichas (`Shape.cs`)

Cada pieza de Tetris está compuesta por un GameObject principal (el pivote) y varios bloques hijos distribuidos en una cuadrícula local de 4x4. El script Shape.cs se encarga de:

  • Movimiento básico: Desplazamientos laterales (izquierda y derecha) y hacia abajo.
  • Rotación: Gira la pieza 90 grados utilizando operaciones de transformación local.
  • Control de colisión previa: Valida junto al tablero si el movimiento es legal antes de aplicarlo visualmente.

3. Código C# Completo: `Shape.cs`

Crea un nuevo script llamado Shape.cs en tu proyecto y añade el siguiente código optimizado:

using UnityEngine; public class Shape : MonoBehaviour { public bool allowRotation = true; public bool canRotate = true; public void MoveLeft() { transform.position += new Vector3(-1, 0, 0); } public void MoveRight() { transform.position += new Vector3(1, 0, 0); } public void MoveDown() { transform.position += new Vector3(0, -1, 0); } public void MoveUp() { transform.position += new Vector3(0, 1, 0); } public void Rotate() { if (allowRotation && canRotate) { transform.Rotate(0, 0, -90); } } public void UndoRotate() { if (allowRotation && canRotate) { transform.Rotate(0, 0, 90); } } }

Siguiente Lección

En la Parte 3 de esta serie aprenderemos a implementar el sistema de sombra o proyección fantasma (`Ghost.cs`) para que el jugador sepa exactamente dónde aterrizará su pieza.

© 2026 Videojuegos Unity Jr. - Creado por Juan Rafael.

No hay comentarios