using UnityEngine; using System.Collections; namespace CarbonInput { /// /// This class will check if a new gamepad was connected or if a gamepad lost its connection. /// If this is the case, they are reinitialized. /// public class ReInit : MonoBehaviour { private string[] _names; void Start() { _names = Input.GetJoystickNames(); StartCoroutine(CheckRoutine()); DontDestroyOnLoad(gameObject); } /// /// Checks once a second if any gamepad has lost connection or was reconnected. /// /// private IEnumerator CheckRoutine() { yield return new WaitForSeconds(0.25f); // On UWP platform Unity needs a few milliseconds to init all gamepads, // therefore it might be the case that they will be initilized now while(true) { if(JoysticksChanged()) { _names = Input.GetJoystickNames(); GamePad.ReInit(); } yield return new WaitForSeconds(1f); } } private bool JoysticksChanged() { var names = Input.GetJoystickNames(); if(names.Length != _names.Length) return true; for(var i = 0; i < names.Length; i++) { if(names[i] != _names[i]) return true; } return false; } } }