Skip to content

Repository files navigation

Warning

Этим пакетом уже можно пользоваться, но он ещё на ранней стадии разработки. Возможно некоторые его части могут измениться.

❓ Что это такое?

Используйте C# event из PlayerInput в Unity без лишнего кода и хлопот.

Этот пакет реализует подобие "шины", слушая происходящие в PlayerInput действия InputAction и автоматически маршрутизирует их к нужным игровым методам-обработчикам! Вам остаётся только реализовать.

Добавить методы-обработчики к маршрутизации можно следующим образом:

// Это нужно добавить внутрь вашего MonoBehaviour где вы будете принимать инпутusingMadeYellow.InputBus;publicclassMyInputController:MonoBevaiour{// Не забудьте назначить сюда ту же шину, что вы указывали для InputController![SerializeField]privateInputService_inputService;// Ваш класс, куда нужно передать командуprivateMyCharacter_character;// И при вызове Start однократно подписать нужные методы-обработчики на `InputActions`privatevoidStart(){_character=GetComponent<MyCharacterClass>();// Подписываем методы Move и Sprint в _character на InputAction с названиями Move и Sprint_inputService.Subscribe(_character.Move).Subscribe(_character.Sprint);}}

💾 Установка

  • Откройте Unity Package Manager (Window > Package Manager) ИЛИ (Window > Package Management > Package Manager) для Unity 6;
  • Нажмите "+" → "Add package from git URL";
  • Вставьте URL этого репозитория (можно скопировать ниже) и нажмите Install;
https://github.com/madeyellow/InputBus.git

🚀 Начало работы

Предварительные условия

Note

Если вы уже используете и настроили ранее PlayerInput - то можете пропустить этот шаг.

Если вы ещё не используете компонент PlayerInput (это компонент Unity для работы с "новой" Input System), то:

  • Создайте пустой GameObject;
  • Добавьте к нему компонент PlayerInput;
    • Укажите в поле Actions нужную вам схему;

Шаг 1. Настройка шины

В окне Project где-нибудь в папке Assets нажнимте правой кнопкой мышки и при помощи комадны Create > Input Bus > Input Service создайте новую шину для работы с инпутом игрока.

Создание шины интупа

Добавьте к GameObject в котором располагается компонент PlayerInput компонент InputController из этого пакета. Укажите в поле Input Service созданную вами шину.

Установка компонентов системы

Нажмите на кнопку "Сгенерировать Input Scheme". Делайте это каждый раз, когда в InputActionsAsset добавляется новая схема.

Всё настроено и готов к работе! Далее рассмотрим как настроить маршрутизацию инпута и вашего метода-обработчика.

Шаг 2. Реализация метода-обработчика

Представим, что вам нужно связать инпут "Move" (допустим это клавиши WASD, образующие Vector2) с какой-то функцией, которая будет запоминать инпут пользователя и двигать персонажа игрока.

В классе, который должен двигать игрока нужно добавить связь с шиной и подписаться на нужный инпут. Будет выглядеть это так:

usingMadeYellow.InputBus.Components;// Добавляем это, чтобы использовать шинуusingUnityEngine.InputSystem;// Добавляем это, чтобы использовать типы InputSystempublicclassMyCharacter:MonoBehaviour{// Добавляем ссылку на шинуpublicInputServiceinputBus;// В эту переменную мы сохраним инпут перемещения от игрока.// Что-то подобное у вас уже скорее всего есть.privateVector2_moveInput;privatevoidStart(){// Добавляем метод Move в шину (вызываем один раз), чтобы принимать инпут от игрока.// Функция Move для его обработки будет вызываться автоматическиinputBus.Subscribe(Move);}// Добавляем метод-обработчик. Называем его так же, как называется инпут!// Можете реализовать его тело как угодно. Самый простой пример представлен внизу.publicvoidMove(InputAction.CallbackContextcontext){if(context.performed)// Когда пользователь выполнил инпут для перемещения - считать что он нажал_moveInput=context.ReadValue<Vector2>();elseif(context.canceled)// Если пользователь отпустил все кнопки - запомнить это и сбросить инпут_moveInput=Vector2.zero;}// Ваша логика перемещения персонажа - может быть абсолютно любой.privatevoidUpdate(){transform.Translate(newVector3(_moveInput.x,0f,_moveInput.y)*10*Time.deltaTime,Space.World);}}

⚡ Почему вам это понравится

  • 🧠 Быстрый старт и удобное использование;
  • ⚡ Автоматическая маршрутизация инпута к методам без лишних заморочек;
  • 💎 Понятное и мощное API;
  • 🚀 Высокая производительность;
  • 📦 Малый размер и отсутствие внешних зависимостей;

🗺️ Roadmap

Запланированные функции

  • Обработка смены схемы управления + событие смены схемы;
  • Генератор схем на основе PlayerInput;
  • Способ схемо-зависимой обработки инпута;
  • Добавить в Samples примеры использования;
  • Расписать все способы работы с пакетом;

🐞 Нашли баг или хотите запросить какой-то функционал?

Создайте Issue и опишите баг/функционал. Я постараюсь добавить его, если он будет полезен этому пакету.

About

Шина обработки Unity Input System на основе C# событий

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages