107 lines
3.3 KiB
C#
107 lines
3.3 KiB
C#
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>();
|
|
|
|
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;
|
|
}
|