// GameInputManager.cs using UnityEngine; using System.Collections.Generic; public class GameInputManager : MonoBehaviour { private static GameInputManager _instance; public static GameInputManager Instance => _instance; public bool isUsingGamepad { get; private set; } [SerializeField] private float gamepadDetectionThreshold = 0.1f; private Dictionary inputBindings = new Dictionary(); private void Awake() { if (_instance != null && _instance != this) { Destroy(gameObject); return; } _instance = this; DontDestroyOnLoad(gameObject); LoadInputBindings(); } private void Update() { DetectInputMethod(); } private void DetectInputMethod() { // Check gamepad input bool gamepadInput = Mathf.Abs(Input.GetAxis(GameConstants.Input.HorizontalAxis)) > gamepadDetectionThreshold || Mathf.Abs(Input.GetAxis(GameConstants.Input.VerticalAxis)) > gamepadDetectionThreshold || Mathf.Abs(Input.GetAxis(GameConstants.Input.AimHorizontalAxis)) > gamepadDetectionThreshold || Mathf.Abs(Input.GetAxis(GameConstants.Input.AimVerticalAxis)) > gamepadDetectionThreshold || Input.GetAxis(GameConstants.Input.RightTrigger) > gamepadDetectionThreshold || Input.GetAxis(GameConstants.Input.LeftTrigger) > gamepadDetectionThreshold; if (gamepadInput) { isUsingGamepad = true; } else if (Input.GetMouseButtonDown(0) || Input.GetMouseButtonDown(1) || Input.anyKeyDown) { isUsingGamepad = false; } } private void LoadInputBindings() { var bindings = Resources.LoadAll("InputBindings"); foreach (var binding in bindings) { inputBindings[binding.bindingName] = binding; Debug.Log(binding.bindingName); } } public float GetValue(string bindingName) { if (inputBindings.TryGetValue(bindingName, out GameInputBinding binding)) return binding.GetValue(); return 0f; } public bool GetButtonDown(string bindingName) { if (inputBindings.TryGetValue(bindingName, out GameInputBinding binding)) return binding.GetButtonDown(); return false; } public bool GetButton(string bindingName) { if (inputBindings.TryGetValue(bindingName, out GameInputBinding binding)) return binding.GetButton(); return false; } public bool GetButtonUp(string bindingName) { if (inputBindings.TryGetValue(bindingName, out GameInputBinding binding)) return binding.GetButtonUp(); return false; } }