Возможно ли в Unity Input Manager добавить UI Button?
Есть ли какая-то возможность в Unity добавить события получаемые из UI (например клик с кнопки) в стандартный Input Manager?
Ответы (2 шт):
Нет, вы не можете сами добавлять события в стандартный Input Manager.
Вы можете написать wrapper к стандартному Input Manager который бы возвращал что-то что вам надо. (и этому wrapper ни кто не мешает внутри использовать Input.GetAxis) или поискать asset который уже умеет так делать.
Хотя во многих ситуациях такие выкрутасы не нужны, вполне будет достаточно чего-то вроде:
using System;
using UnityEngine;
using Button = UnityEngine.UIElements.Button;
public class Controller : MonoBehaviour
{
[SerializeField]
private Button rightButton;
private Direction direction = Direction.Undefined; //поле, кот. влияет на общий функционал
private void Start()
{
rightButton.clicked += () => { direction = Direction.Right;}; // изменение влияющей переменной на основе UI события
}
private void Update()
{
if (Input.GetAxis("Horizontal") > 0)
{
direction = Direction.Right; // изменение влияющей переменной на основе InputManager
}
Move(); // вызов метода с общим функционалом
}
private void Move() // метод с общим функционалом
{
switch (direction)
{
case Direction.Up:
throw new NotImplementedException();
case Direction.Down:
throw new NotImplementedException();
case Direction.Left:
throw new NotImplementedException();
case Direction.Right:
throw new NotImplementedException();
case Direction.Undefined:
throw new NotImplementedException();
default:
throw new NotImplementedException();
}
}
}
public enum Direction
{
Up,
Down,
Left,
Right,
Undefined
}
Немного поковырявшись, я понял что разработчики Unity настоятельно рекомендуют всем переходить на новую Input System, которая доступна в версии 1.0.1 начиная с версии Unity 2019.1. Устанавливается через Package Manager:
Официальная документация находится здесь.
Новая система гораздо более гибкая, в том числе есть решение по моему вопросу. На кнопку (или другой элемент UI) вешается компонент, в котором указывается какую клавишу она должна дублировать:
Далее при нажатии на эту наэкранную кнопку будет отрабатываться логика, которую вы прописали для этой клавиши, ничего дополнительного городить не нужно.
Решил поделиться, возможно кому-то будет полезно.

