Изучите Input System с помощью обновленных уроков и нашего примера проекта, Warriors

С помощью Input System Вы можете быстро настроить управление для различных платформ, от мобильных до VR. Начните работу с нашими примерами проектов и новыми видеоуроками для начинающих и средних пользователей.
Ввод данных - это основа того, что делает Ваши проекты в реальном времени интерактивными. Система ввода Unity стандартизирует способ реализации элементов управления и предоставляет новые расширенные функциональные возможности. Он проверен для Unity 2019 LTS и более новых версий ( полный список поддерживаемых устройств ввода см. в документации).
Наши новые обучающие материалы помогут Вам быстро начать работу, даже если Вы совсем новичок в разработке для нескольких платформ. Если Вы уже знакомы с рабочими процессами, узнайте больше о том, как использовать Input System для управления (другими) инструментами Unity, такими как Cinemachine или Unity UI, на примере Warriors, нашего основного проекта.
В этой мартовской сессии Meet the Devs объясняется, почему мы создали эту новую систему, и приводится демонстрация, в которой описаны рабочие процессы настройки локального Multiplayer, быстрого добавления управления с помощью геймпада, появления новых игроков и реализации мобильного управления. Рене Дамм, ведущий разработчик Input System, также отвечает на вопросы аудитории об инструментах и "дорожной карте" команды.
Если Вы новичок, который просто хочет познакомиться с основными рабочими процессами ввода в Unity, посмотрите обновленный проект Roll-a-Ball на Unity Learn. Он проведет Вас через первые шаги, такие как установка пакета Input System, добавление компонента Player Input и применение входных данных к проигрывателю.


В нашей серии Prototype также используется Input System, как Вы можете увидеть в этом видео и примере проекта по созданию босса с процедурной анимацией. Актив действий ввода космического корабля использует ввод для управления движением, стрельбы лазерными снарядами и ускорения.
Warriors - это проект, который демонстрирует более промежуточные инструменты и API с Input System в типичной кроссплатформенной игре от третьего лица с локальным мультиплеером. Он доступен для Unity 2019 LTS и будет обновлен для версии 2020 LTS, когда она выйдет в следующем году. Вы можете загрузить проект с GitHub, где у нас есть три ветки:
Проект построен вокруг персонажей, которыми можно управлять как в режиме одиночной игры, так и в режиме Local Multiplayer. Если для параметра Game Manager выбрано значение Local Multiplayer, он создаст несколько экземпляров префаба Warrior. Поскольку префаб Warrior настроен на использование компонента Input System "Вход игрока", каждый экземпляр Warrior будет автоматически иметь подключенное устройство ввода.
Схема управления в этой игре Warrior настроена на кроссплатформенную игру и автоматически переключается между клавиатурой и различными геймпадами. Эта установка представляет собой пример применения сглаживания к необработанным входным данным во время исполнения, чтобы направленное движение персонажа было равномерным независимо от того, какие оси ввода (клавиши клавиатуры или джойстик геймпада) использует игрок. Следующая схема управления также использует нажатие кнопки для базовой анимации атаки.

Актив действий ввода Warrior также настроен на две различные карты действий: одна для управления персонажем (бег и атака), а другая - для управления вводом данных в меню. В игре или любом другом интерактивном проекте обычно есть разные состояния с разными требованиями к управлению, которые используют одни и те же привязки ввода.
Например, если нажать на джойстик в одном направлении, Воин побежит к этой оси. Однако когда игра поставлена на паузу, игрок может использовать джойстик для перемещения между различными кнопками и опциями в меню паузы.
Используя Input System, Вы можете легко настроить различные карты действий для различных сценариев схемы управления и переключать их для каждого компонента PlayerInput во время выполнения игры с помощью простого API:
playerInput.SwitchCurrentActionMap(stringForMapName);
После того, как Вы настроили карту действий для взаимодействия с пользовательским интерфейсом, действия можно назначить на модуль ввода пользовательского интерфейса системы событий:

В проекте Warriors каждый игрок может приостановить игру и взаимодействовать с меню паузы. Пользовательский интерфейс наложения состоит из нескольких кнопок выбора и панели изменения контекста справа. Модуль ввода UI Input System применяет действия, назначенные для взаимодействия с любым компонентом Unity UI с включенной функцией Interactable (например, кнопками и слайдерами).

Это взаимодействие с пользовательским интерфейсом будет изолировано для конкретного игрока, нажавшего на паузу. Например, если Игрок 3 поставит игру на паузу, то Игрок 1 и 2 не смогут взаимодействовать с ней, и только Игрок 3 будет управлять ею. Когда Игрок 3 отменяет паузу в игре, все элементы управления Игрока возобновляются. Для этого мы вызываем следующие методы на компоненте PlayerInput:
playerInput.ActivateInput();
playerInput.DeactivateInput();
В меню UI Menu есть контекстная панель для перепривязки элементов управления во время выполнения. Это позволит Вам выполнить интерактивную перепривязку для определенного действия ввода и установить для него новую привязку. Например, при использовании контроллера PlayStation Вы можете переназначить действие "Атака" с кнопки "Крест" на другую кнопку ввода, например, "Треугольник" или R2.

Эта перепривязка применяется как переопределение к конкретному компоненту PlayerInput. Например, Игрок 2 сможет перепривязать свою кнопку "Атака" к другой кнопке, но это не повлияет на использование Игроком 3 своего входного действия "Атака".
API для настройки интерактивной перепривязки также содержит операцию для завершения перепривязки. Это позволит Вам настроить собственный контроль при обновлении пользовательского интерфейса, сохранении состояния игры или изменении любого другого элемента игрового процесса на основе этого события.
private InputActionRebindingExtensions.RebindingOperation rebindOperation;
void StartInteractiveRebind()
{
rebindOperation = inputAction.PerformInteractiveRebinding().OnComplete(operation => RebindCompleted());
rebindOperation.Start();
}
void RebindCompleted()
{
rebindOperation.Dispose();
//Apply UI Changes (IE: New Binding Icon)
}
Помимо интеграции Input System с Event System и Unity UI, проект Warriors также демонстрирует, как ее можно настроить для совместной работы с Cinemachine. Типичная настройка камеры для игры от третьего лица включает в себя вращающуюся камеру, направление обзора которой задается положением мыши или направлением нажатия джойстика. Компонент Cinemachine Input Provider может быть добавлен к установке камеры Cinemachine Free Look, что позволяет действию Input отправлять данные оси Vector 2 непосредственно в значения управления осями Cinemachine. На изображении ниже Вы видите, что CinemachineInputProvider использует входные данные из действия Look Input Action.

Input System также содержит различные API, чтобы другие системы могли получить доступ к данным во время выполнения, которые могут быть отображены в пользовательском интерфейсе или других визуальных средствах. Проект примера Warriors использует данные из Player Input для отображения такой информации, как текущее устройство игрока, идентификатор входа игрока или даже для обновления элементов управления ребиндом на основе UI для текущей привязки. Мы создали собственную систему, которая принимает строки устройства и привязки и возвращает определенную иконку.
Например, если игрок использует контроллер Xbox и действие "Атака" привязано к северной контекстной кнопке, то на экране появится значок кнопки Y. Однако если игрок использует клавиатуру, то будет отображена строка для текущей привязанной клавиши. Вы можете извлечь и использовать этот инструмент Конфигуратор дисплея устройства в своих собственных проектах.

Пакет Input System также содержит несколько дополнительных образцов, которые Вы можете изучить в Менеджере пакетов. Вы можете использовать их в качестве справочника и расширить или адаптировать их для своих собственных проектов. Там же Вы можете найти официальную документацию, включая это Краткое руководство пользователя.
Input System 1.1 в настоящее время находится в стадии предварительного просмотра, и в нем много исправлений и несколько улучшений. Теперь Вы можете сохранять и загружать ребинды в формате JSON (см. пример сценария RebindSaveLoad.cs), а макеты устройств теперь могут быть предварительно скомпилированы, что значительно сокращает время инстанцирования и затраты на сборку мусора (GC) в куче для этих устройств.
Мы надеемся, что этот пример проекта и другие учебные материалы помогут Вам начать использовать Input System для воплощения своих идей в жизнь. Пожалуйста, поделитесь тем, что Вы хотите узнать дальше, в разделе комментариев ниже. Кроме того, следите за страницей Input System, чтобы найти другие руководства и другие ресурсы.
