using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.EventSystems; using UnityEngine.UI; using System; [RequireComponent(typeof(EventTrigger))] public class ButtonV2 : MonoBehaviour { EventTrigger trigger; public Image image; public Text text; [SerializeField] public BasicUIEffect imageFx; [SerializeField] public BasicUIEffect textFx; public float fxSpeed = 0.1f; public AudioClip hoverSfx; public AudioClip selectSfx; void Start() { trigger = GetComponent(); EventTrigger.Entry entry1 = new EventTrigger.Entry(); entry1.eventID = EventTriggerType.PointerEnter; entry1.callback.AddListener(OnMouseEnter); EventTrigger.Entry entry2 = new EventTrigger.Entry(); entry2.eventID = EventTriggerType.PointerExit; entry2.callback.AddListener(OnMouseExit); EventTrigger.Entry entry3 = new EventTrigger.Entry(); entry3.eventID = EventTriggerType.PointerDown; entry3.callback.AddListener((BaseEventData e)=>{AudioSource.PlayClipAtPoint(selectSfx, Vector3.zero); OnMouseExit(e);}); EventTrigger.Entry entry4 = new EventTrigger.Entry(); entry4.eventID = EventTriggerType.PointerUp; entry4.callback.AddListener(OnMouseEnter); trigger.triggers.Add(entry1); trigger.triggers.Add(entry2); trigger.triggers.Add(entry3); trigger.triggers.Add(entry4); if(image!=null)defSizeImg = image.rectTransform.sizeDelta; if(text!=null)defTextImg = text.rectTransform.sizeDelta; } Vector2 defSizeImg; Vector2 defTextImg; // Update is called once per frame void Update() { if (active) { if (image != null) { image.color = Color.Lerp(image.color, imageFx.activeColor, fxSpeed); image.rectTransform.sizeDelta = Vector2.Lerp(image.rectTransform.sizeDelta, defTextImg * imageFx.activeSize, fxSpeed); } if (text != null) { text.color = Color.Lerp(text.color, textFx.activeColor, fxSpeed); text.rectTransform.sizeDelta = Vector2.Lerp(text.rectTransform.sizeDelta, defTextImg * imageFx.activeSize, fxSpeed); } } else { if (image != null) { image.color = Color.Lerp(image.color, imageFx.idleColor, fxSpeed); image.rectTransform.sizeDelta = Vector2.Lerp(image.rectTransform.sizeDelta, defTextImg, fxSpeed); } if (text != null) { text.color = Color.Lerp(text.color, textFx.idleColor, fxSpeed); text.rectTransform.sizeDelta = Vector2.Lerp(text.rectTransform.sizeDelta, defTextImg, fxSpeed); } } } bool active = false; void OnMouseEnter(BaseEventData e) { active = true; if (hoverSfx != null) AudioSource.PlayClipAtPoint(hoverSfx, Vector3.zero); } void OnMouseExit(BaseEventData e) { active = false; } } [Serializable] public class BasicUIEffect { public Color idleColor; public Color activeColor; public float activeSize; }