Version: 2017.3
Scripting de iOS
Scripting Avanzado para Móviles en Unity

Soporte para el Controlador del Juego iOS

Comenzando con OS 7, un API input controlador de juego estandarizado es proporcionado por Apple. El soporte de Unity para este API viene como parte de un API Input Estándar de Unity.

Detectando Controladores de Juego adjuntos

LLamando Input.GetJoystickNames va a enumerar los nombres de todos los controladores adjuntos. Los nombres siguen el patron: “[$profile_type,$connection_type] joystick $number by $model”. $profile_type puede ser ya sea “basic” o “extended”, el $connection_type es “wired” o “wireless”. Puede ser utilizado para detectar el tipo de controlador conectado. Es bueno revisar esta lista cada pequeños segundos para detectar si los controles han sido adjuntos o des-adjuntados. Aquí hay un ejemplo de cómo hacerlo en C#:

private bool connected = false;

IEnumerator CheckForControllers() {
    while (true) {
        var controllers = Input.GetJoystickNames();
        if (!connected && controllers.Length > 0) {
            connected = true;
            Debug.Log("Connected");
        } else if (connected && controllers.Length == 0) {
            connected = false;
            Debug.Log("Disconnected");
        }
        yield return new WaitForSeconds(1f);
    }
}

void Awake() {
    StartCoroutine(CheckForControllers());
}

Cuando los controladores son detectados usted puede ocultar los controles táctiles en pantalla o modificarlos para complementar el input del controlador. La nueva tarea es revisar por el input del Controlador del Juego.

Manejando Input

El esquema actual de input es muy dependiente en el tipo de juego que usted está desarrollando. Pero en cualquier caso se va a leer los ejes y los estados de botones. Tome el siguiente escenario de juego 2D como un ejemplo simple:

El jugador controla el personaje frijol, el cual se puede mover a la derecha o izquierda, saltar y dispararle a los malos. Por defecto, el eje “Horizontal” input de Unity es mapeado al perfil básico de controlador de juego dpad y el stick analogo izquierdo en controladores de perfil extendidos. Entonces el código utilizado para mover el personaje para atrás y adelante es muy simple:

float h = Input.GetAxis("Horizontal");
if (h * rigidbody2D.velocity.x < maxSpeed)
    rigidbody2D.AddForce(Vector2.right * h * moveForce);

Usted puede configurar las acciones de saltar y disparar en el Administrador de Input de Unity.

  • Accédalo del menú del Editor de Unity como sigue: Edit > Project Settings > Input.

  • Seleccione el botón joystick “A” para la acción de “Saltar” y “X” para “Disparar”.

  • Abra las siguientes acciones en el Administrador de Input de Unity y especifique “joystick button 14” para “Saltar” y “joystick button 15” para “Disparar”.

El manejo de código luego se ve algo así:

if (Input.GetButtonDown("Jump") && grounded) {
    rigidbody2D.AddForce(new Vector2(0f, jumpForce));
}

if (Input.GetButtonDown("Fire")) {
    Rigidbody2D bulletInstance = Instantiate(rocket, transform.position, Quaternion.Euler(new Vector3(0,0,0))) as Rigidbody2D;
    bulletInstance.velocity = new Vector2(speed, 0);
}

La siguiente lista de trucos debería ayudarlo a mapear el input del controlador en el Unity Input Manager:

Nombre KeyCode Eje
A botón del joystick 14 Eje del joystick 14
B botón del joystick 13 Eje del joystick 13
X botón del joystick 15 eje del joystick 15
Y botón del joystick 12 eje del joystick 12
El stick izquierdo N/A Eje 1 (X) - Horizontal, Eje 2 (Y) - Vertical
El Stick Derecho N/A Eje 3 - Horizontal, Eje 4 - Vertical
Dpad Up joystick button 4 Perfil básico solamente: Eje 1 (X) - Horizontal, Eje 2 (Y) - Vertical
Dpad Right joystick button 5 Perfil básico solamente: Eje 1 (X) - Horizontal, Eje 2 (Y) - Vertical
Dpad Down joystick button 6 Perfil básico solamente: Eje 1 (X) - Horizontal, Eje 2 (Y) - Vertical
Dpad Left joystick button 7 Perfil básico solamente: Eje 1 (X) - Horizontal, Eje 2 (Y) - Vertical
Pausar botón del joystick 0 N/A
L1/R1 botón del joystick 8/botón del joystick 9 botón del joystick 8/botón del joystick 9
L2/R2 botón del joystick 10/botón del joystick 11 botón del joystick 10/botón del joystick 11

Notas finales en el Soporte del API del Controlador de Juego

Unity solo incluye el marco del GameController en el proyecto si un script en el proyecto hace referencia a ’Input.GetJoystickNames`. Unity iOS Runtime carga el marco de forma dinámica, si está disponible. Para versiones anteriores de iOS, devuelve una lista vacía de controladores.

La documentación de Apple explícitamente enuncia que el input del controlador debe ser opcional y su juego debería reproducirse sin ellos.

Scripting de iOS
Scripting Avanzado para Móviles en Unity