Detección y Eliminación de Coincidencias en Candy Crush
Clase 17 de 31 • Curso de Desarrollo de Videojuegos para Móviles con Unity
Contenido del curso
Sprite Atlas y Generación de Caramelos
- 5

Sprite Editor y cámaras en Unity para móviles
11:53 min - 6

Sprites múltiples en Unity con slice automático
12:06 min - 7

Script base de Candy en Unity C#
10:57 min - 8

Configuración y Gestión del Tablero en Unity con C#
10:08 min - 9

Inicializar tablero 2D con bucles anidados
10:27 min - 10

Configuración de slice por tamaño en Unity
05:22 min - 11

Creación y Configuración de Tablero en Unity para Videojuegos
08:22 min - 12

Sprites aleatorios de prefabs en Unity
07:18 min
Diseño de Game Play
- 13

Arreglar bug de tripletes en tablero Candy Crush
12:33 min - 14

OnMouseDown para seleccionar caramelos
12:14 min - 15

Swap de caramelos sin mover GameObject
10:17 min - 16

Configuración de Física en Unity para Movimiento de Caramelos
13:30 min - 17

Detección y Eliminación de Coincidencias en Candy Crush
Viendo ahora - 18

Anular sprites en lugar de destruir objetos
15:26 min - 19

Caída en cascada para match-3 con corrutinas
13:23 min - 20

Generar caramelos sin crear matches accidentales
09:09 min - 21

Último bug visual: rebotes y recálculos
10:55 min
Retos finales
- 22

Diseño de Interfaz Gráfica en Unity para Videojuegos
11:20 min - 23

Variables autocomputadas en Unity GUI Manager
07:31 min - 24

Implementación de Singleton en Gestor de Interfaz de Usuario
08:13 min - 25

Corrutinas para pantalla Game Over sin interrupciones
06:55 min - 26

Multiplica puntuación con combos inteligentes
04:46 min - 27

Integra tres audios en tu videojuego de caramelos
01:47 min - 28

Animación y Destrucción de Caramelos en Videojuegos
02:00 min - 29

Menú principal para tu videojuego móvil
03:28 min
Cierre del curso
Detectar coincidencias de caramelos puede ser simple y eficiente cuando se entiende la lógica esencial. Aquí verás cómo estructurar el análisis por filas y columnas, definir el mínimo para un match y usar raycast 2D en C# con resultados claros, manteniendo un rendimiento óptimo en móviles al evitar update innecesarios.
¿Cómo detectar matches en candy crush con C# y Unity?
El manager es el encargado de revisar la matriz de datos y decidir si hay vecinos en fila o columna que formen un match de tres o más. Para ello, se escanean direcciones usando una regla básica: el actual y sus vecinos contiguos iguales.
¿Cómo define el manager el mínimo para un match?
Para mantener el código claro, se usa una constante que representa vecinos mínimos del actual. Dos vecinos + el actual = tres en línea.
- Mejora la legibilidad del conteo de coincidencias.
- Sigue buenas prácticas de C#: constantes con inicial mayúscula.
- Representa el número de vecinos, no el total absoluto.
// En BoardManager
public const int MinCandiesToMatch = 2; // 2 vecinos + el actual = 3
¿Qué hace el método findmatch con raycast 2D?
La idea es recopilar vecinos iguales en una dirección y en la contraria. Se usa una List<GameObject> para acumular coincidencias y se compara el SpriteRenderer.sprite del vecino con el del caramelo actual.
- Devuelve los objetos que coinciden con el actual.
- Usa
Physics2D.Raycastdesde la posición del caramelo. - Repite mientras exista collider y el sprite sea igual.
- Recalcula el rayo desde el vecino encontrado.
- Repite en dirección opuesta para cubrir ambos lados.
// En Candy.cs
private List<GameObject> FindMatch(Vector2 direction)
{
var matchingCandies = new List<GameObject>();
// Adelante en la dirección indicada
RaycastHit2D hit = Physics2D.Raycast(transform.position, direction);
while (hit.collider != null &&
hit.collider.GetComponent<SpriteRenderer>()?.sprite ==
GetComponent<SpriteRenderer>()?.sprite)
{
matchingCandies.Add(hit.collider.gameObject);
hit = Physics2D.Raycast(hit.collider.transform.position, direction);
}
// Hacia la dirección contraria
hit = Physics2D.Raycast(transform.position, -direction);
while (hit.collider != null &&
hit.collider.GetComponent<SpriteRenderer>()?.sprite ==
GetComponent<SpriteRenderer>()?.sprite)
{
matchingCandies.Add(hit.collider.gameObject);
hit = Physics2D.Raycast(hit.collider.transform.position, -direction);
}
return matchingCandies;
}
¿Cómo manejar la dirección contraria sin duplicar código?
- Reutiliza la misma variable
RaycastHit2Dya declarada. - Invierte el vector:
-directionpara el lado opuesto. - Inicia el rayo desde
transform.positionen el sentido opuesto. - Vuelve a avanzar desde
hit.collider.transform.positionmanteniendo-direction. - Añade cada vecino válido a
matchingCandies.
¿Qué estructura usa el board manager para filas y columnas?
El board manager “conoce” todos los caramelos. Recorre filas y columnas de la matriz para verificar si existen vecinos contiguos que formen coincidencias. Con la lista devuelta, se podrá decidir si hay match y preparar la destrucción de los caramelos coincidentes.
// En BoardManager
private List<GameObject> FindMatch(Vector2 direction)
{
var matchingCandies = new List<GameObject>();
// Aquí se coordina la búsqueda por filas o columnas.
return matchingCandies;
}
¿Por qué evitar update en móviles?
- El método update corre cada frame.
- En móviles implicaría consumo constante de batería.
- Mejor distribuir tareas en métodos específicos y mantener update limpio.
¿Qué variantes puedes crear en el gameplay?
- Cuatro en cuadrado como condición especial.
- Coincidencias en diagonal.
- Cambios así requieren ajustar gran parte del gameplay.
¿Te animas a proponer mejoras o variantes? Deja tus ideas y comparte cómo ampliaste la detección de coincidencias para hacer el juego más divertido.