Diferentes controles en Unity

Recopilación de cosas que me hubiera gustado saber cuando intenté integrar controles de móvil, ordenador y mando.

Joystick para dispositivos móviles

Te recomiendo este asset que es gratuito.

Snippet para definir el joystick y como recuperar los valores de los ejes x-y.
¡Ojo! está todo a cascoporro no está ordenado donde debería estar.

FixedJoystick joystick = GameObject.Find("Joystick").GetComponent<FixedJoystick>();
float joy_x = joystick.Horizontal;
float joy_y = joystick.Vertical;

Truco guarro para ocultar el joystick en la build que no sea el ejecutable, de esta forma si me sale el joystick si hago el build para webgl y móvil.

#if UNITY_STANDALONE_WIN
    GameObject joystick = GameObject.Find("Joystick");
    Vector3 joystick_pos = joystick.transform.position;
    joystick_pos.y = -10000;
    joystick.transform.position = joystick_pos
#endif

O también podríamos desactivar el control de esta forma:

#if UNITY_STANDALONE_WIN
    GameObject.Find("Joystick").SetActive(false);
#endif

Mando y teclado

Snippet es universal para mando y teclado para recuperar los valores de los ejes x-y:

float joy_x = Input.GetAxisRaw("Horizontal");
float joy_y = Input.GetAxisRaw("Vertical");

Snippet para detectar cuando pulsan un botón

if (Input.GetKeyUp(KeyCode.JoystickButton4)){
    // evento al pulsar y levantar el dedo
}
if (Input.GetKeyUp(KeyCode.JoystickButton4)){
    // evento al pulsar sin llegar a levantar el dedo
}

Lista de referencia de los KeyCode

Mapeo del mando

Xbox

PlayStation 4

Fuente

Foco en botones

Snippet muy útil a la hora de hacer menús para poner o quitar el foco en botones para que sea más usable navegar con teclado y mando por los botones.

using UnityEngine.EventSystems;
// poner el foco en un botón
EventSystem.current.SetSelectedGameObject(GameObject.Find("Button"));
// quitar el foco de cualquier botón
EventSystem.current.SetSelectedGameObject(null);

Input System

Admito que al ser nuevo en Unity todavía no tengo muy claro este apartado, me parece haber leído que hay dos sistemas el anterior que está en File - Build settings - Player settings - Input manager.

Y el nuevo sistema en el que tienes que instalar un paquete y hacer más cosas, aquí hay un vídeo resumen de CodeMonkey.

Chuleta GIT