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 прямо указано, что ввод с контроллера должен быть необязательным, и в вашу игру можно будет играть без него.