No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Selección de los caramelos

14/31
Recursos

Vamos a programar la interacción de nuestros usuarios con la aplicación.

Debemos detectar los toques de los usuarios a la pantalla, así que, vamos a utilizar el método OnMouseDown que nos va a ayudar a detectar los contactos de nuestros dedos con la pantalla.

Recuerda que Unity nos permite programar un mismo juego para todas las plataformas disponibles y, a pesar de que, el método que vamos a utilizar tenga el nombre de “Mouse”, Unity lo va a traducir por nosotros para detectar cualquier toque a la pantalla, sea con los dedos o el mouse.

Aportes 9

Preguntas 1

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

Para detectar los clicks del mouse o los toques y movimientos de nuestros dedos en la pantalla debemos usar el método OnMouseDown de Unity.

También existen otros métodos como OnMouseUp, OnMouseDrag, OnMouseEnter, OnMouseExit, OnMouseOver, y OnMouseUpAsButton:

La logica para lograr seleccionar y deseleccionar caramelos es curiosa:

private void OnMouseDown()
    {
        if (spriteRenderer.sprite == null ||
            BoardManager.sharedInstance.isShifting)
        {
            return;
        }
        if (isSelected)
        {
            DeselectCandy();
        }
        else
        {
            if (previousSelected == null)
            {
                SelectCandy();
            }
            else
            {
                previousSelected.DeselectCandy();
                SelectCandy();
            }
        }
    }
  1. En caso de que hayamos tocado cualquir otra parte del juego o ya se estén animando los aramelos (por ejemplo cuando hay un match) pues entones nos quedamos haciendo nada

  2. Si el caramelo tocado estaba seleccionado, ahora lo deseleccionamos

  3. En caso de que no estuviera seleccionado antes, mira a ver si es el primero en el que tocamos y lo seleccionamos, si no si ya había uno seleccionado vamos a de forma sencilla deseleccionar el previo y seleccionar el actual

Tengo un problema con el método OnMouseDown, no me reconoce este método y no se activa cuando hago click en el candy

Si a alguien le paso (como a mi) que no entendian como cada instancia del componente Candy puede reconocer cual es el previousSelected de otro caramelo, recordemos que esta variable es static, lo cual significa que mantiene el mismo valor a travez de todas las instancias.

Genial

También para entenderlo aún más rápido, vemos la definición de **onMouseDown: ** Se llama a OnMouseDown cuando el usuario ha presionado el botón del mouse mientras estaba sobre el Collider .
https://docs.unity3d.com/ScriptReference/MonoBehaviour.OnMouseDown.html

He comprendido como funciona sin embargo habrá que echarle otra repasada para que quede bien grabado.

Continuamos! 😄

me saltan esos errores no entiendo a que de deba…

este es mi codigo :

private void Awake()
{
    spriteRenderer = GetComponent<SpriteRenderer>();
   
}

private void SelectCandy()
{
    isSelected = true;
    spriteRenderer.color = selectedColor;
    previousSelect = gameObject.GetComponent<Candy>();
}

private void DeselectCandy()
{
    isSelected = false;
    spriteRenderer.color = Color.white;
    previousSelect = null;
}

private void OnMouseDown()
{
    if (spriteRenderer.sprite == null || BoardManager.sharedInstance.isShifting)
    {
        return;
    }
    if (isSelected)
    {
        DeselectCandy();
    }
    else
    {
        if (previousSelect == null)
        {
            SelectCandy();
        }
        else
        {
            previousSelect.DeselectCandy();
            SelectCandy();
        }
    }
}

buenas, tengo un problema con los collider en este proyecto. Tengo el mismo código que muestra el profesor, con un pequeño cambio. En lugar de utilizar Sprite estoy usando prefab y al correr el programa se visualiza de forma correcta, pero al hacer click sobre las imágenes el programa no reacciona.
Lo primero que valide fue que todos los prefab tuviesen su collider. Luego de esto, agregue en la escena de forma manual cada uno de lo prefab y todos funcionaron de forma correcta. Por ultimo lo que se me ocurrió fue resetear en tiempo de ejecución cada uno de los prefab, lo que para mi sorpresa si funciono.
Alguno tiene una sugerencia?.

Para validar que no fuera problemas los prefab, cambie todo mi proyecto, para que este igual que el de las clases y tuve el mismo error