Menú con soporte para mando

El asunto no resultó tan fácil como esperaba, pero anoche logré adaptar el menú principal que tenía hecho. Ahora es posible desplazarse por los botones usando el mando de Xbox.
La dificultad estriba en que lo usual es utilizar la cruceta (DPad), que no es un botón , sino un eje (igual que los triggers). O sea, que no es un valor verdadero o falso, y tienes que agenciarte una vía de interpretarlo como tal. No solo eso, también debes dar tiempo a que el botón de la cruceta sea liberado antes de volver a identificar el valor del eje como un nuevo evento, con unos 150 milisegundos basta. Esto último podría ser un error mío, pero fue la única forma que encontré de hacerlo funcionar correctamente. Y la cosa, en código, quedaría así:

int selected = 0;
bool DpadUp = false;
bool DpadDown = false;
float EventTimer = 0;


void Update () {
        if (EventTimer>0)
            EventTimer -= Time.deltaTime;
        float y =  Input.GetAxis("DPadY");
        if (y > 0 && !DpadUp && EventTimer <= 0) {
            DpadUp = true;
            EventTimer = 0.15f;
        }
        if (y < 0 && !DpadDown && EventTimer <= 0) {
            DpadDown = true;
            EventTimer = 0.15f;
        }
        if (y==0) {

            DpadDown = false;
            DpadUp = false;
            EventTimer = 0;
        }

        if (DpadUp) {
            if (selected>0) {
                ButtonList[selected].GetComponent().sprite = transp;                  selected--;
                ButtonList[selected].GetComponent().sprite = selector;                }
            DpadUp = false; //"consumir"el evento
        }
        if (DpadDown) {
            if (selected < 5) {
                ButtonList[selected].GetComponent().sprite = transp; //hide currently selected
                selected++;
                ButtonList[selected].GetComponent().sprite = selector;                }
            DpadDown = false;
        }     
    }


Para un menú la solución es relativamente trivial. La cosa se complica cuando se trata de una cuadrícula de botones, como en el caso del inventario. Esa es mi tarea para hoy. En este caso, hay que trabajar con los dos ejes, no solamente con el eje vertical del DPad.
Y como resultado colateral de cacharrear con el mando, he descubierto que tendré que cambiar la mecánica de juego a cámara libre, como Mass Effect o The Witcher. El caso es que con el mando es imposible controlar movimiento, dirección de la cámara y el cursor del mouse a la vez. No sé cómo lo hacen en Dragon Age, pero me da la impresión de que la mecánica cambia, según los periféricos que utilices.

Comentarios