PanelControl.cs 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178
  1. using System.Collections.Generic;
  2. using TMPro;
  3. using UnityEngine;
  4. using UnityEngine.UI;
  5. #if ENABLE_INPUT_SYSTEM
  6. using UnityEngine.InputSystem;
  7. #endif
  8. namespace LayerLab.GUIScripts
  9. {
  10. public class PanelControl : MonoBehaviour
  11. {
  12. private int _page;
  13. private bool _isReady;
  14. private TextMeshProUGUI _textTitle;
  15. [SerializeField] private List<GameObject> defaultPanels = new ();
  16. [SerializeField] private List<GameObject> otherPanels = new ();
  17. [SerializeField] private Transform panelTransformDefault;
  18. [SerializeField] private Transform panelTransformOther;
  19. [SerializeField] private Button buttonPrev;
  20. [SerializeField] private Button buttonNext;
  21. private bool IsOtherMode { get; set; }
  22. private void OnValidate()
  23. {
  24. var panels = GameObject.Find("Panels");
  25. if (panels) panelTransformDefault = panels.transform;
  26. buttonPrev = transform.GetChild(0).GetComponent<Button>();
  27. buttonNext = transform.GetChild(2).GetComponent<Button>();
  28. }
  29. private void Reset()
  30. {
  31. OnValidate();
  32. }
  33. private void Start()
  34. {
  35. _textTitle = transform.GetComponentInChildren<TextMeshProUGUI>();
  36. buttonPrev.onClick.AddListener(Click_Prev);
  37. buttonNext.onClick.AddListener(Click_Next);
  38. foreach (Transform t in panelTransformDefault)
  39. {
  40. defaultPanels.Add(t.gameObject);
  41. t.gameObject.SetActive(false);
  42. }
  43. defaultPanels[_page].SetActive(true);
  44. if(panelTransformOther == null) return;
  45. foreach (Transform t in panelTransformOther)
  46. {
  47. otherPanels.Add(t.gameObject);
  48. t.gameObject.SetActive(false);
  49. }
  50. if (otherPanels.Count > 0) otherPanels[_page].SetActive(true);
  51. _isReady = true;
  52. CheckControl();
  53. }
  54. private void Update()
  55. {
  56. if (defaultPanels.Count <= 0 || !_isReady) return;
  57. #if ENABLE_INPUT_SYSTEM
  58. if (Keyboard.current.leftArrowKey.wasPressedThisFrame)
  59. {
  60. Click_Prev();
  61. }
  62. else if (Keyboard.current.rightArrowKey.wasPressedThisFrame)
  63. {
  64. Click_Next();
  65. }
  66. #else
  67. if (Input.GetKeyDown(KeyCode.LeftArrow))
  68. {
  69. Click_Prev();
  70. }
  71. else if (Input.GetKeyDown(KeyCode.RightArrow))
  72. {
  73. Click_Next();
  74. }
  75. #endif
  76. }
  77. //Click_Prev
  78. //Click_Prev
  79. private void Click_Prev()
  80. {
  81. if (_page <= 0) return;
  82. defaultPanels[_page].SetActive(false);
  83. if(otherPanels.Count > 0) otherPanels[_page].SetActive(false);
  84. _page -= 1;
  85. defaultPanels[_page].SetActive(true);
  86. if(otherPanels.Count > 0) otherPanels[_page].SetActive(true);
  87. if (!IsOtherMode)
  88. {
  89. _textTitle.text = defaultPanels[_page].name;
  90. }
  91. else
  92. {
  93. if (otherPanels.Count > 0)
  94. {
  95. _textTitle.text = otherPanels[_page].name;
  96. }
  97. }
  98. CheckControl();
  99. }
  100. //Click_Next
  101. private void Click_Next()
  102. {
  103. if (_page >= defaultPanels.Count - 1) return;
  104. defaultPanels[_page].SetActive(false);
  105. if(otherPanels.Count > 0) otherPanels[_page].SetActive(false);
  106. _page += 1;
  107. defaultPanels[_page].SetActive(true);
  108. if(otherPanels.Count > 0) otherPanels[_page].SetActive(true);
  109. CheckControl();
  110. }
  111. private void SetArrowActive()
  112. {
  113. buttonPrev.gameObject.SetActive(_page > 0);
  114. buttonNext.gameObject.SetActive(_page < defaultPanels.Count - 1);
  115. }
  116. //SetTitle, SetArrow Active
  117. private void CheckControl()
  118. {
  119. if (!IsOtherMode)
  120. {
  121. _textTitle.text = defaultPanels[_page].name.Replace("_", " ");
  122. }
  123. else
  124. {
  125. if (otherPanels.Count > 0)
  126. {
  127. _textTitle.text = otherPanels[_page].name.Replace("_", " ");
  128. }
  129. }
  130. SetArrowActive();
  131. }
  132. public void Click_Mode()
  133. {
  134. IsOtherMode = !IsOtherMode;
  135. SetMode();
  136. CheckControl();
  137. }
  138. private void SetMode()
  139. {
  140. panelTransformDefault.gameObject.SetActive(!IsOtherMode);
  141. if(otherPanels.Count > 0) panelTransformOther.gameObject.SetActive(IsOtherMode);
  142. }
  143. }
  144. }