ButtonV2.cs 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. using UnityEngine.EventSystems;
  5. using UnityEngine.UI;
  6. using System;
  7. [RequireComponent(typeof(EventTrigger))]
  8. public class ButtonV2 : MonoBehaviour
  9. {
  10. EventTrigger trigger;
  11. public Image image;
  12. public Text text;
  13. [SerializeField]
  14. public BasicUIEffect imageFx;
  15. [SerializeField]
  16. public BasicUIEffect textFx;
  17. public float fxSpeed = 0.1f;
  18. public AudioClip hoverSfx;
  19. public AudioClip selectSfx;
  20. void Start()
  21. {
  22. trigger = GetComponent<EventTrigger>();
  23. EventTrigger.Entry entry1 = new EventTrigger.Entry();
  24. entry1.eventID = EventTriggerType.PointerEnter;
  25. entry1.callback.AddListener(OnMouseEnter);
  26. EventTrigger.Entry entry2 = new EventTrigger.Entry();
  27. entry2.eventID = EventTriggerType.PointerExit;
  28. entry2.callback.AddListener(OnMouseExit);
  29. EventTrigger.Entry entry3 = new EventTrigger.Entry();
  30. entry3.eventID = EventTriggerType.PointerDown;
  31. entry3.callback.AddListener((BaseEventData e)=>{AudioSource.PlayClipAtPoint(selectSfx, Vector3.zero); OnMouseExit(e);});
  32. EventTrigger.Entry entry4 = new EventTrigger.Entry();
  33. entry4.eventID = EventTriggerType.PointerUp;
  34. entry4.callback.AddListener(OnMouseEnter);
  35. trigger.triggers.Add(entry1);
  36. trigger.triggers.Add(entry2);
  37. trigger.triggers.Add(entry3);
  38. trigger.triggers.Add(entry4);
  39. if(image!=null)defSizeImg = image.rectTransform.sizeDelta;
  40. if(text!=null)defTextImg = text.rectTransform.sizeDelta;
  41. }
  42. Vector2 defSizeImg;
  43. Vector2 defTextImg;
  44. // Update is called once per frame
  45. void Update()
  46. {
  47. if (active)
  48. {
  49. if (image != null)
  50. {
  51. image.color = Color.Lerp(image.color, imageFx.activeColor, fxSpeed);
  52. image.rectTransform.sizeDelta = Vector2.Lerp(image.rectTransform.sizeDelta, defTextImg * imageFx.activeSize, fxSpeed);
  53. }
  54. if (text != null)
  55. {
  56. text.color = Color.Lerp(text.color, textFx.activeColor, fxSpeed);
  57. text.rectTransform.sizeDelta = Vector2.Lerp(text.rectTransform.sizeDelta, defTextImg * imageFx.activeSize, fxSpeed);
  58. }
  59. }
  60. else
  61. {
  62. if (image != null)
  63. {
  64. image.color = Color.Lerp(image.color, imageFx.idleColor, fxSpeed);
  65. image.rectTransform.sizeDelta = Vector2.Lerp(image.rectTransform.sizeDelta, defTextImg, fxSpeed);
  66. }
  67. if (text != null)
  68. {
  69. text.color = Color.Lerp(text.color, textFx.idleColor, fxSpeed);
  70. text.rectTransform.sizeDelta = Vector2.Lerp(text.rectTransform.sizeDelta, defTextImg, fxSpeed);
  71. }
  72. }
  73. }
  74. bool active = false;
  75. void OnMouseEnter(BaseEventData e)
  76. {
  77. active = true;
  78. if (hoverSfx != null) AudioSource.PlayClipAtPoint(hoverSfx, Vector3.zero);
  79. }
  80. void OnMouseExit(BaseEventData e)
  81. {
  82. active = false;
  83. }
  84. }
  85. [Serializable]
  86. public class BasicUIEffect
  87. {
  88. public Color idleColor;
  89. public Color activeColor;
  90. public float activeSize;
  91. }