WasTabon
@WasTabon

Из за чего Multi Hold в New Input System не работает?

66084baf87871767627615.png

В скрипте ниже я подрубаю Input, потом передаю его в InputManagerи уже использую в нужных мне классах.

У меня он создан как для кнопок клавиатуры, но дополнительно использую OnScreenButton для такого же ввода на телефоны ( с него возможности потестить нет).

И если я зажимаю W - в классе GameTester выводится Vertical, а если D - то Horizontal, но если и W и D То вызывается что то одно, почему так и как это пофиксить?

Вместо switch case делал через if ещё, не помогло. Так же создавал отдельно методы для вызова горизонтали и вертикали, тоже не особо работает

public void Initialize(CarInput carInput, Button gasButton, Button brakeButton, Button rightButton, Button leftButton)
        {
            gasButton.gameObject.AddComponent<OnScreenButton>().controlPath = "<Keyboard>/w";
            brakeButton.gameObject.AddComponent<OnScreenButton>().controlPath = "<Keyboard>/s";
            rightButton.gameObject.AddComponent<OnScreenButton>().controlPath = "<Keyboard>/d";
            leftButton.gameObject.AddComponent<OnScreenButton>().controlPath = "<Keyboard>/a";
            
            carInput.UI.Move.started += ctx => OnMovePressed(ctx.ReadValue<Vector2>().normalized);
            carInput.UI.Move.canceled += ctx => OnMoveCanceled();
        }

        private void OnMovePressed(Vector2 dir)
        {
            Direction newDirection = GetDirection(dir);

            switch (newDirection)
            {
                case Direction.Up:
                    GasPressed?.Invoke(dir);
                    goto case Direction.Down;
                case Direction.Down:
                    BrakePressed?.Invoke(dir);
                    goto case Direction.Left;
                case Direction.Left:
                    TurnLeftPressed?.Invoke(dir);
                    goto case Direction.Right;
                case Direction.Right:
                    TurnRightPressed?.Invoke(dir);
                    break;
            }
        }


public class InputManager
    {
        public Vector2 Verical { get; private set; }
        public Vector2 Horizontal { get; private set; }
        
        public void Initialize(UIController uiController)
        {
            uiController.GasPressed += SetVertical;
            uiController.BrakePressed += SetVertical;
            uiController.TurnRightPressed += SetHorizontal;
            uiController.TurnLeftPressed += SetHorizontal;
        }

        private void SetVertical(Vector2 value)
        {
            Verical = value;
        }
        private void SetHorizontal(Vector2 value)
        {
            Horizontal = value;
        }
    }


public class GameTester : MonoBehaviour
{
    [Inject] private InputManager _inputManager;

    private void Update()
    {
        Debug.Log($"Vertical: {_inputManager.Verical}");
        Debug.Log($"Horizontal: {_inputManager.Horizontal}");
    }
}
  • Вопрос задан
  • 28 просмотров
Пригласить эксперта
Ответы на вопрос 1
WasTabon
@WasTabon Автор вопроса
вообщем из за
carInput.UI.Move.started += ctx => OnMovePressed(ctx.ReadValue<Vector2>().normalized);


я получал только одну ось, ту - которая была первая нажата

public void Update()
        {
            GetInvokeInput();
        }

        private void GetInvokeInput()
        {
            _inputDir = _carInput.UI.Move.ReadValue<Vector2>();
            InputPressed?.Invoke(_inputDir);
        }


вот так работает
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы