Swap de caramelos sin mover GameObject
Clase 15 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
Viendo ahora - 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
12:06 min - 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
Domina un flujo de juego sólido en Unity: aprende a intercambiar caramelos con un método de swap de sprites ágil, sin mover el GameObject y manteniendo coherentes los datos del identificador (id). Verás cómo una estructura clara con if, else y return permite un código simple y mantenible, ideal para iterar rápido en editor y probar en móvil al final.
¿Qué problema resuelve el swap de sprites en Unity?
Intercambiar solo la imagen del caramelo (el sprite) evita desplazar el GameObject, lo que hace el código más ágil y cómodo en teléfonos móviles. Esta primera iteración permite cambiar cualquier par de caramelos en pantalla; más adelante se limitará a vecinos (arriba, abajo, izquierda, derecha).
¿Por qué no mover el GameObject en móvil?
- Menos coste: solo cambia el sprite, no la transformación del objeto.
- Código simple: se evita lógica de posicionamiento.
- Flujo claro: se controla todo desde el Sprite Renderer.
¿Cuándo evitar el intercambio por igualdad de sprite?
- Si ambos caramelos tienen la misma imagen, no se percibe cambio.
- Se corta con
returnpara cancelar el movimiento innecesario. - Evita afectar el conteo de movimientos por una acción vacía.
¿Cómo implementar el método swap sprite paso a paso?
Se añade un método público en el script del caramelo para usarlo desde el manager. La lógica: comprobar igualdad de sprite, usar un auxiliar para la copia, hacer el swap visual y luego intercambiar también el id.
public class Candy : MonoBehaviour
{
public SpriteRenderer spriteRenderer; // asignado en editor o en Awake.
public int id; // identificador único del caramelo.
public void SwapSprite(Candy newCandy)
{
// 1) Si tienen el mismo sprite: no hacer nada.
if (spriteRenderer.sprite == newCandy.GetComponent<SpriteRenderer>().sprite)
{
return;
}
// 2) Copia temporal (auxiliar) del sprite del nuevo caramelo.
Sprite oldSprite = newCandy.GetComponent<SpriteRenderer>().sprite;
// 3) El nuevo caramelo toma el sprite del actual.
newCandy.GetComponent<SpriteRenderer>().sprite = this.spriteRenderer.sprite;
// 4) El actual toma el sprite de la copia temporal.
this.spriteRenderer.sprite = oldSprite;
// 5) Intercambio del identificador (id) con copia temporal.
int tempId = newCandy.id;
newCandy.id = this.id;
this.id = tempId;
}
}
¿Cómo se hace la copia temporal auxiliar?
- Usar una variable local como copia de seguridad.
- Guardar el sprite del otro caramelo antes de sobrescribir.
- Asegurar el intercambio en ambos sentidos sin perder datos.
¿Cómo intercambiar el identificador id junto con el sprite?
- Crear
tempIdpara el valor original. - Asignar
newCandy.id = this.id. - Finalizar con
this.id = tempId. - Mantener coherencia entre imagen y datos del caramelo.
¿Dónde integrar la llamada en el flujo de interacción?
La invocación a SwapSprite debe hacerse en el manejo del clic, dentro de mouse down. No se llama si no hay sprite o si se hace clic en el mismo caramelo para deseleccionar. Se ejecuta en el else donde ya existe un caramelo previamente seleccionado (previous selected), justo antes de deseleccionar.
void OnMouseDown()
{
// ... lógica previa de selección/deselección.
// Caso: hay un caramelo previamente seleccionado y se hace clic en otro.
// Antes de deseleccionar, intercambiar el actual con el anterior.
if (/* else donde procede el intercambio */)
{
this.SwapSprite(previousSelected);
// Luego, deseleccionar los involucrados según tu flujo actual.
}
}
¿Qué casos cubre el control con if, else y return?
- Sin sprite: no se intenta el intercambio.
- Clic en el mismo seleccionado: solo deselección.
- Sprites iguales:
returny no se cambia nada. - Dos diferentes: swap visual y swap de id.
¿Qué alcance tiene esta primera iteración del gameplay?
- Se pueden intercambiar caramelos en cualquier lugar del tablero.
- No se permite intercambiar un objeto consigo mismo.
- Ya es posible crear tres en raya manualmente con los assets.
- Próximo paso: restringir a vecinos si el movimiento es válido.
¿Te quedó alguna duda sobre el flujo con if/else, el uso del auxiliar o la ubicación de la llamada en mouse down? Deja tu pregunta y seguimos mejorándolo juntos.