В скрипте ниже я подрубаю 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}");
}
}