OnMouseDown para seleccionar caramelos
Clase 14 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
Viendo ahora - 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
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
La interacción del usuario en Unity puede ser directa, clara y multiplataforma. Con OnMouseDown, el mismo código reconoce toques en móvil y clics en PC, permitiendo seleccionar y mover caramelos con el dedo o el ratón. Aquí verás cómo estructurar el flujo, qué variables usar y cómo dar feedback visual sin complicar el código.
¿Cómo detecta Unity toques y clics con OnMouseDown?
Unity traduce automáticamente el mouse a toque en móvil gracias a sus traductores internos. Así, el mismo juego puede adaptarse entre móvil y PC con mínimos cambios. Con el método OnMouseDown, el motor llama al código cuando el usuario toca o hace clic sobre el caramelo.
Puntos clave: - Reutiliza la detección con OnMouseDown para móvil y PC sin duplicar lógica. - Mantén el código legible separando tareas: selectCandy, deselectCandy, OnMouseDown. - Evita mezclar toda la lógica en un solo método; facilita el mantenimiento.
¿Qué estados y variables gobiernan la selección?
Para gestionar qué caramelo está activo y qué hacer ante nuevos toques, se definen estados mínimos pero claros. La encapsulación ayuda a evitar efectos colaterales entre scripts.
- En el gestor del tablero, usa una variable privada: selectedCandy. Es mejor que sea privada para que otros scripts no la modifiquen.
- No reutilices currentCandy: es público y es un placeholder de inicialización; podría destruirse o necesitarse en otro momento.
- En el caramelo, controla el estado con un booleano: isSelected. Cambia entre true/false al seleccionar y desseleccionar.
- Usa previousSelected para saber cuál fue el último caramelo seleccionado. Aclara que es un tipo Candy, no un GameObject.
- Para el feedback visual, emplea spriteRenderer.color con selectedColor y Color.white.
¿Cómo se ve el feedback visual?
El feedback visual es simple y efectivo: al seleccionar, spriteRenderer.color = selectedColor (tinte gris medio). Al desseleccionar, spriteRenderer.color = Color.white para volver al color original. Resultado: claridad inmediata sobre qué caramelo está activo.
¿Por qué evitar Start y Update aquí?
Si no usas lógica por fotograma, elimina Start y Update. Mantienes el script limpio y más fácil de leer. Menos ruido, misma funcionalidad.
¿Cómo se implementa la lógica de selección y desselección?
La clave es combinar comprobaciones tempranas con una lógica de estados predecible. Primero, evita acciones cuando no toca; luego, decide entre seleccionar o desseleccionar.
- Comprobaciones tempranas en OnMouseDown.
- Si no hay imagen: spriteRenderer.sprite == null, no haces nada.
- Si el tablero está animando: BoardManager.SharedInstance.isShifting, no haces nada.
- Si el caramelo ya está seleccionado y lo pulsas, desselecciona.
- Si no está seleccionado:
- Si no hay ningún anterior seleccionado, selecciona el actual.
- Si ya había uno, desselecciona el anterior.
// En BoardManager.cs
private Candy selectedCandy; // Encapsula el caramelo actualmente seleccionado.
// En Candy.cs (fragmentos clave)
public class Candy : MonoBehaviour {
private bool isSelected = false; // Estado local.
private SpriteRenderer spriteRenderer; // Asignado previamente.
public Color selectedColor; // Tinte gris medio configurado.
// Referencia al previamente seleccionado (puede vivir en el BoardManager).
// Candy previousSelected;
void OnMouseDown() {
// 1) Early return: no imagen o tablero está animando.
if (spriteRenderer.sprite == null || BoardManager.SharedInstance.isShifting) {
return;
}
// 2) Lógica de selección/desselección.
if (isSelected) {
deselectCandy();
} else {
if (previousSelected == null) {
selectCandy();
} else {
previousSelected.deselectCandy();
// Variante opcional de gameplay:
// selectCandy();
}
}
}
private void selectCandy() {
isSelected = true;
spriteRenderer.color = selectedColor;
previousSelected = this; // Garantiza que el "anterior" apunte al actual.
}
private void deselectCandy() {
isSelected = false;
spriteRenderer.color = Color.white;
previousSelected = null;
}
}
¿Qué hace OnMouseDown paso a paso?
- Valida si hay sprite visible o si el tablero está en movimiento. Si se cumple cualquiera, sale con return.
- Si el caramelo ya estaba activo, invoca deselectCandy().
- Si no estaba activo y no había uno previo, llama a selectCandy().
- Si sí había uno previo, llama a previousSelected.deselectCandy().
¿Qué variante de gameplay puedes habilitar?
Puedes permitir que, al tocar un segundo caramelo, se desseleccione el anterior y se seleccione automáticamente el nuevo con una sola línea extra tras desseleccionar. Esto cambia la experiencia de usuario sin reescribir la arquitectura.
Habilidades y conceptos reforzados: - Encapsulación: variables privadas para proteger estados. - Patrón singleton: acceso a BoardManager.SharedInstance. - Métodos atómicos: selectCandy y deselectCandy separados para claridad. - Early return: evita estados inválidos y reduce anidación. - Feedback visual: tintes con SpriteRenderer y colores. - Compatibilidad multiplataforma: OnMouseDown unifica táctil y ratón.
¿Tienes dudas sobre la variante de selección o sobre cómo organizar previousSelected entre scripts? Cuéntalo y revisamos el flujo juntos.