No funcionan los botones del Canvas en Unity

Por GameDevTraum

Descripción del problema

Se ha creado un Canvas con uno o más botones para realizar una acción, al correr el juego no funcionan los botones cuando los pulsamos.

Esto es algo que me ha pasado en varias ocasiones y puede deberse a varias razones.

Vamos a asumir que tienes un GameObject con el Script con la función del botón definida como pública, lo has asignado al componente Button del Canvas y seleccionado la función apropiada. Si no has hecho esto y necesitas ayuda, te invito a leer este artículo sobre cómo usar botones del Canvas.

Posible Solución 1: No hay EventSystem

Cuando creamos un Canvas automáticamente se crea un GameObject llamado “EventSystem”, como se observa en la figura 1, este GameObject tiene asociada algunas componentes que se encargan de manejar los eventos de entrada.

Fig. 1: GameObject EventSystem en la jerarquía.

Fig. 2: Componentes de EventSystem en el inspector.

Si accidentalmente eliminamos el GameObject EventSystem, no se detectan las entradas del mouse y no funcionan los botones del Canvas.

Para solucionar esto podemos crear un segundo Canvas para que aparezca el GameObject EventSystem y luego eliminar el segundo Canvas.

Posible Solución 2: Botón configurado como no interactivo

El componente Button tiene un booleano para inhabilitarlo, como se ve en la figura 3 la casilla “Interactable”.

Fig. 3: La casilla Interactable se utiliza para deshabilitar el botón.

Posible Solución 3: Botón no es un RayCast target

El botón tiene asignado un componente Image para la imagen de fondo y además un componente Text para el texto del botón.

Ambos componentes tienen una casilla con el nombre “Raycast Target”, que lo que hace es habilitar el componente para que pueda ser detectado por un trazado de rayos, el proceso por el cual se detecta que se ha pulsado algún elemento del Canvas.

En las figuras 3 y 4 vemos las casillas “Raycast Target”. En un botón si todas las casillas Raycast Target están desmarcadas, no se podrá detectar cuando se haga clic sobre esos elementos.

Fig. 4: Componente imagen de Canvas.

Fig. 5: Componente texto de Canvas

Para solucionar este problema, asegurarse que al menos una casilla Raycast Target se encuentre habilitada.