Input
Пазлы

Как устранить сообщение «This project uses Input Manager, which is marked for deprecation…»

После очередного обновления движка Unity при открытии своего проекта в панели в логах у меня стало появляться сообщение:

This project uses Input Manager, which is marked for deprecation. To manage input in your project, use the Input System package instead.

Оно предупреждает про использование старой системы ввода Legacy Input — Unity — Manual и что желательно перейти на новую.

Input01

Сначала нужно убедиться — установлен ли у вас нужный пакет «Imput System». В меню выбираем Window — Package Management — Package Manager.

Input02

Как правило — должен быть установлен.

Вариант 1

Можно просто вернуть настройки ввода на старый Input Manager (если не используется новый). Для этого откройте через меню Edit -> Project Settings -> Player, перейдите в раздел Other Settings, в «Configurations» найдите параметр Active Input Handling и установите значение Input Manager (Old). Перезагрузите редактор.

Input03

В зависимости от вашего рабочего процесса с проектом, есть еще пара путей решения:

  • Установка Both: Если вы хотите использовать обе системы одновременно, выберите в настройках Active Input Handling.
  • Переход на новый Input System: Если вы обновили проект или хотите использовать современный инструментарий, установите пакет Input System через Package Manager (Window -> Package Manager), настройте профиль действий (Input Actions) и удалите старые скрипты, привязанные к устаревшим классам Input.GetAxis и Input.GetButton.

Вариант 2

Лучше, конечно, перейти на новую систему ввода. Но для этого придётся подстраивать/переписывать много чего — особенно, конечно, менять код.

У меня сам переход осуществился, в принципе, без проблем. Полностью работало меню в игре и другие действия. Но вот в самой каждой сцене с пазлами (взять и перенести элемент) не вышло — мышь вообще никак не реагировала. Пришлось «копаться».

Тут всё зависит от структуры и возможностей, которые вы вложили в свою игру при её проектировании. По основным моментам скажу следующее…

1. Обязательно придётся заменять везде опрос клавиатуры и мыши. Например:

Старый код

Новый код (Input System)

Input.GetKey(KeyCode.Space) Keyboard.current.spaceKey.isPressed
Input.GetKeyDown(KeyCode.W) Keyboard.current.wKey.wasPressedThisFrame
Input.GetMouseButtonDown(0) Mouse.current.leftButton.wasPressedThisFrame
Input.mousePosition Mouse.current.position.ReadValue()
Input.GetAxis(«Horizontal») Gamepad.current.leftStick.x.ReadValue()
Input.GetKeyDown(KeyCode.Escape) Keyboard.current.escapeKey.wasPressedThisFrame
и т.п….

2. Нужно не забыть так же добавить строку в начале скриптов:

using UnityEngine.InputSystem;

3. Теперь не передаются опросы в движок через «void OnMouseDown()» или «void OnMouseUp()» и пр…

В общем, если обработка ввода делалась «своими силами», то придётся переделывать.

Не собирался этой статьёй полностью решить эту проблему за вас, но, надеюсь, правильное направление для поисков своего решения задал.