Возможно ли в Unity Input Manager добавить UI Button?

Есть ли какая-то возможность в Unity добавить события получаемые из UI (например клик с кнопки) в стандартный Input Manager?


Ответы (2 шт):

Автор решения: ssa112112

Нет, вы не можете сами добавлять события в стандартный 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
}
→ Ссылка
Автор решения: pk-man

Немного поковырявшись, я понял что разработчики Unity настоятельно рекомендуют всем переходить на новую Input System, которая доступна в версии 1.0.1 начиная с версии Unity 2019.1. Устанавливается через Package Manager:

Input System

Официальная документация находится здесь.

Новая система гораздо более гибкая, в том числе есть решение по моему вопросу. На кнопку (или другой элемент UI) вешается компонент, в котором указывается какую клавишу она должна дублировать:

On-Screen Button

Далее при нажатии на эту наэкранную кнопку будет отрабатываться логика, которую вы прописали для этой клавиши, ничего дополнительного городить не нужно.

Решил поделиться, возможно кому-то будет полезно.

→ Ссылка