EventSystemHandler.cs 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. using UnityEngine;
  2. using UnityEngine.EventSystems;
  3. using UnityEngine.SceneManagement;
  4. #if ENABLE_INPUT_SYSTEM && !ENABLE_LEGACY_INPUT_MANAGER
  5. using UnityEngine.InputSystem.UI;
  6. #endif
  7. namespace IngameDebugConsole
  8. {
  9. // Avoid multiple EventSystems in the scene by activating the embedded EventSystem only if one doesn't already exist in the scene
  10. [DefaultExecutionOrder( 1000 )]
  11. public class EventSystemHandler : MonoBehaviour
  12. {
  13. #pragma warning disable 0649
  14. [SerializeField]
  15. private GameObject embeddedEventSystem;
  16. #pragma warning restore 0649
  17. #if ENABLE_INPUT_SYSTEM && !ENABLE_LEGACY_INPUT_MANAGER
  18. private void Awake()
  19. {
  20. StandaloneInputModule legacyInputModule = embeddedEventSystem.GetComponent<StandaloneInputModule>();
  21. if( legacyInputModule )
  22. {
  23. DestroyImmediate( legacyInputModule );
  24. embeddedEventSystem.AddComponent<InputSystemUIInputModule>();
  25. }
  26. }
  27. #endif
  28. private void OnEnable()
  29. {
  30. SceneManager.sceneLoaded -= OnSceneLoaded;
  31. SceneManager.sceneLoaded += OnSceneLoaded;
  32. SceneManager.sceneUnloaded -= OnSceneUnloaded;
  33. SceneManager.sceneUnloaded += OnSceneUnloaded;
  34. ActivateEventSystemIfNeeded();
  35. }
  36. private void OnDisable()
  37. {
  38. SceneManager.sceneLoaded -= OnSceneLoaded;
  39. SceneManager.sceneUnloaded -= OnSceneUnloaded;
  40. DeactivateEventSystem();
  41. }
  42. private void OnSceneLoaded( Scene scene, LoadSceneMode mode )
  43. {
  44. DeactivateEventSystem();
  45. ActivateEventSystemIfNeeded();
  46. }
  47. private void OnSceneUnloaded( Scene current )
  48. {
  49. // Deactivate the embedded EventSystem before changing scenes because the new scene might have its own EventSystem
  50. DeactivateEventSystem();
  51. }
  52. private void ActivateEventSystemIfNeeded()
  53. {
  54. if( embeddedEventSystem && !EventSystem.current )
  55. embeddedEventSystem.SetActive( true );
  56. }
  57. private void DeactivateEventSystem()
  58. {
  59. if( embeddedEventSystem )
  60. embeddedEventSystem.SetActive( false );
  61. }
  62. }
  63. }