🖥️
Global Tech
  • Основное
    • 📦StarterPack
      • 🔑Модули
        • Input module
        • Система ивентов
        • Стартовый экран и управление
        • Монеты
        • Прокачка
        • Уровни и конец уровня
        • GUIManager
        • GUIConveyor
        • UI pack
        • AI
        • Локализация
        • MatEditor(Покраска)
        • Ники
        • RaycastAimInput и ViewPortDragInput
      • 🛠️Утилиты
        • Installers
        • PrefsValue
        • ValueObservable
        • CameraController
        • CharacterMotor
        • Trajectory
        • RotateObject
        • ScreenResolution
        • Extensions
        • RagdollHelper
        • ModelRenderManager
        • CMath
        • LauncherManager
        • FpsController
      • Примечания
    • ⚒️Сторонние ассеты
      • Odin Inspector and Serializer
        • ✏️Inspector
          • Meta Attributes
          • Button
          • Attribute Expressions
          • Enum
          • PreviewField
          • Required
          • GUIColor
          • Inline Editor
        • 💽Serializer
          • Static Serialization
          • Debug Serialization
    • 🧱TTM Pack
      • 🛍️Shop
      • ⭐RateUs
      • 📨Notifications
      • Upgrades Manager
      • 🔋Accumulation Bonus
      • Lottery module
    • 📚Гайды
      • Гайд по старту проекта
      • Гайд по UI
      • DOTween
      • LINQ
      • Делегаты, лямбды в C# и UniRx
      • Принципы SOLID
      • Как занести sdk в loadscreen
      • Гайд по Line counter.
      • Гайд по билду через android studio
      • Гайд по решению конфликтов.
      • Гайд по установке Unity YAML mergetool
    • 📒Code Style
      • Конвенция имён
      • Объявления / Декларации
      • Конвенция строчных отступов
      • Стиль скобок
      • Get, Set и Try в нейминге методов
      • Поля
      • Другие стандарты
      • Настройка code style в IDE
  • Ознакомиться
    • 🎓Постулаты программиста
    • 📈Этапы разработки
      • Prototype
      • Production
      • To The Moon - Soft launch
      • Refactor
    • 🏗️Архитектура кода
      • Основной подход к архитектуре
      • Событийная архитектура кода
      • Singleton
      • Абстрактные классы
    • ✏️Написание кода
      • Правила хорошего тона
      • PrefsValue вместо PlayerPrefs
      • UniRx вместо кoрутинов и инвоков
      • Детекция нажатий
      • Руководство по оптимизации кода
    • ⚙️Работа с движком
      • Сцена
      • Файлы
      • Префабы
      • UI
      • Animator
      • Работа с физикой
      • Работа с префабами
    • 💼Рабочий график
    • 👨‍💼Овнеры проектов
  • Дополнительно
    • 🚄Механики, ускоряющие решение задачи
  • ❓Tech FAQ
    • Взаимодействие с артом по встраиванию моделей
    • Слетающие ссылки и перезагрузка сцены
    • Обновление gradle, если не получается сбилдить (among-us only)
    • Обновление gitignore
    • Unity plus для релизных билдов
    • Гайд по sdk-pack
    • Наш git-flow
    • Как сбилдить под IOS?
    • Как установить gitbackup тулзу
    • Как установить Unity YAML mergetool (или как мержить сцены с префабами)
    • Как билдить apk или aab among-us прямо в unity
    • 🔑Как получить хэши для FB SDK
Powered by GitBook
On this page
  • Как добавить модуль на сцену
  • Как подписаться
  • Отписка вручную
  • Возможные проблемы
  • Важная доп. информация
  1. Основное
  2. StarterPack
  3. Модули

Input module

PreviousМодулиNextСистема ивентов

Last updated 2 years ago

Как добавить модуль на сцену

Чтобы добавить его на сцену, нужно добавить его префаб в корень общего канваса.

Как подписаться

1. Класс-обработчик должен имплементировать интерфейс IInputHandler

2. Нужно делегировать нужные публичные методы класса для подписки на эти события, добавив к ним атрибут InputCallback с нужным типом триггера, вызывающего нужный event (клик, перетаскивание и другие). Метод должен иметь один PointerEventData параметр или ни одного параметра (то есть нужно передавать метод, похожий на IDragHandler-интерфейс, либо без параметров). Обычно достаточно PointerEventData eventData параметра для получения данных по нажатию.

Отписка вручную

Для отписки можно вызвать метод расширения UnsubscribeInput():

Необходимо передать имя метода, который нужно отписать. Необходимости в отписке на OnDisable нет, отписка происходит автоматически. Полностью отписка не происходит, если скрипт хоть и отключен, но все еще существует на сцене. При повторном включении подписка заработает вновь. Полная отписка происходит при удалении объекта со сцены.

Возможные проблемы

Когда подписки перестают работать или работают некорректно, возможны несколько проблем, связанные с самим модулем:

  1. Возможно появилась ошибка ArgumentException: No parameter of BaseEventData class in method <название метода> of class <класс обработчика>;. Тогда у подписанного метода лишние параметры и отсутствует PointerEventData параметр.

  2. Делегируемый метод не публичный, и его нельзя передать InputEventsTrigger-у. Тогда ничего не произойдет, и подписки не будет.

  3. На канвасе есть растянутый Image, который перекрывает префаб TriggerInput. UI, которые не должны перекрывать ввод пользователя, должны быть не доступны для Raycast (У Image есть флаг Raycast Target, его необходимо выключить).

  4. Если класс не имплементирует интерфейс IInputHandler, подписки этого класса не зафиксируются. Также если нет атрибутов, то IInputHandler ничего не даст.

  5. Ну, или объект с таким скриптом просто не лежит на сцене/ в каком-либо префабе, и менеджер обработчиков событий не будет его видеть.

Важная доп. информация

  • События нажатий обрабатываются при помощи реализации класса Event Trigger (класс InputEventsTrigger), скрипт которого лежит на объекте рядом с Image (image растянут на весь экран).

  • Префабы самостоятельно решают свои подписки (информация об атрибутах запекается в каждом подписанном префабе).

  • Вызывать подписанные методы никто не запрещает, если нужно вызвать его из других методов того же класса. Атрибут на это повлиять не может.

  • Для просмотра затронутых модулем префабов есть свой ScriptableObject - InputSettings. Здесь можно запустить поиск подписок в скриптах и увидеть, какие префабы были подписаны. Можно также добавить папки, префабы в которых могут подписываться и по которым будет происходить поиск. По умолчанию стоит папка префабов Assets/Prefabs Не рекомендуется тут ничего менять в принципе, это для отладки, если вдруг не понятно что-то.

📦
🔑