Мои Уведомления
Привет, !
Мой Аккаунт Мои Финансы Мои Подписки Мои Настройки Выход
Руководство API скрипты

Поддержка игрового контроллера iOS

Unity поддерживает стандартизированный игровой контроллерустройство для управления объектами и персонажами в игре.
См. Словарь
API ввода, предоставляемый Apple как часть стандартного API ввода Unity. .

Обнаружение подключенных игровых контроллеров

Вызов Input.GetJoystickNames перечислит имена всех подключенных контроллеров. Имена следуют шаблону: [$profile_type,$connection_type] джойстик $number by $model. $profile_type может быть «базовым» или «расширенным», $connection_type — «проводным» или «беспроводным». Его можно использовать для определения типа подключенного контроллера. Стоит перепроверять этот список каждые несколько секунд, чтобы определить, были ли контроллеры подключены или отключены. Вот пример 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()); }

При обнаружении контроллеров вы можете либо скрыть сенсорные элементы управления на экране, либо изменить их, чтобы они дополняли ввод с контроллера. Следующая задача — проверить ввод с игрового контроллера.

Обработка ввода

Реальная схема ввода сильно зависит от типа разрабатываемой вами игры. Но по сути это чтение осей и состояний кнопок. В качестве простого примера возьмем следующий этап 2D-игры:

Игрок управляет персонажем-бобом, который может двигаться вправо или влево, прыгать и стрелять по плохим парням. По умолчанию «горизонтальная» ось ввода Unity отображается на D-pad игрового контроллера базового профиля и на левый аналоговый джойстик на контроллерах расширенного профиля. Таким образом, код, используемый для перемещения символа вперед и назад, довольно прост:

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

Вы можете настроить действия прыжка и стрельбы в настройках Input Unity.

<ул>
  • Откройте его из меню редактора Unity следующим образом: Редактировать > Настройки проекта Широкий набор настроек, которые позволяют настроить поведение физики, аудио, сети, графики, ввода и многих других областей вашего проекта. Подробнее
    См. Словарь
    , затем выберите категорию Ввод .

  • Нажмите кнопку джойстика «A» для действия «Прыжок» и «X» для действия «Огонь».

  • Откройте следующие действия в настройках Unity Input и укажите «кнопка джойстика 14» для «Прыжок» и «кнопка джойстика 15» для «Огонь».

    Тогда обработка кода выглядит следующим образом:

    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); }

    Следующая памятка должна помочь вам сопоставить ввод контроллера с настройками Unity Input:

    Имя Код ключа Ось
    A joystick button 14 joystick axis 14
    B joystick button 13 joystick axis 13
    X joystick button 15 joystick axis 15
    Y joystick button 12 joystick axis 12
    Left Stick N/A Axis 1 (X) - Horizontal, Axis 2 (Y) - Vertical
    Right Stick N/A Axis 3 - Horizontal, Axis 4 - Vertical
    D-pad Up joystick button 4 Basic profile only: Axis 2 (Y)
    D-pad Right joystick button 5 Basic profile only: Axis 1 (X)
    D-pad Down joystick button 6 Basic profile only: Axis 2 (Y)
    D-pad Left joystick button 7 Basic profile only: Axis 1 (X)
    Pause joystick button 0 N/A
    L1/R1 joystick button 8 / joystick button 9 joystick axis 8 / joystick axis 9
    L2/R2 joystick button 10 / joystick button 11 joystick axis 10 / joystick axis 11

    Заключительные замечания о поддержке Game Controller API

    Unity включает инфраструктуру Game Controller в проект только в том случае, если скрипт в проекте ссылается на Input.GetJoystickNames. Unity iOSмобильная операционная система Apple. Подробнее
    См. в Словарь
    . Среда выполнения динамически загружает инфраструктуру, если она доступна.

    В документации Apple прямо указано, что ввод с контроллера должен быть необязательным, и в вашу игру можно будет играть без него.

  • Вы можете отблагодарить автора, за перевод документации на русский язык. ₽ Спасибо
    Руководство Unity 2021.3