com.alicizax.unity.ui.exten.../Runtime/UXComponent/Button/UXButton.cs

89 lines
2.2 KiB
C#
Raw Normal View History

2025-04-11 17:26:28 +08:00
using System;
2025-07-28 13:04:49 +08:00
using System.Collections;
2025-04-11 17:26:28 +08:00
using System.Collections.Generic;
using AlicizaX.UI;
2025-04-11 17:26:28 +08:00
using AlicizaX.UI.Extension;
using UnityEngine.EventSystems;
namespace UnityEngine.UI
2025-04-11 17:26:28 +08:00
{
[AddComponentMenu("UI/UXButton", 30)]
2026-03-27 14:38:26 +08:00
public class UXButton : UXSelectable, IPointerClickHandler, ISubmitHandler
2025-04-11 17:26:28 +08:00
{
[SerializeField] private AudioClip hoverAudioClip;
[SerializeField] private AudioClip clickAudioClip;
2025-04-11 17:26:28 +08:00
protected UXButton()
{
}
public override void OnPointerEnter(PointerEventData eventData)
{
base.OnPointerEnter(eventData);
PlayAudio(hoverAudioClip);
}
public virtual void OnPointerClick(PointerEventData eventData)
{
if (eventData.button != PointerEventData.InputButton.Left)
return;
Press();
PlayAudio(clickAudioClip);
}
public virtual void OnSubmit(BaseEventData eventData)
{
Press();
PlayAudio(clickAudioClip);
2026-03-18 16:01:18 +08:00
if (!IsActive() || !IsInteractable())
return;
2025-12-15 20:54:23 +08:00
DoStateTransition(SelectionState.Pressed, false);
StartCoroutine(OnFinishSubmit());
2025-12-17 14:23:24 +08:00
}
2025-12-15 20:54:23 +08:00
private IEnumerator OnFinishSubmit()
{
var fadeTime = colors.fadeDuration;
var elapsedTime = 0f;
2025-12-15 20:54:23 +08:00
while (elapsedTime < fadeTime)
{
elapsedTime += Time.unscaledDeltaTime;
yield return null;
}
DoStateTransition(currentSelectionState, false);
}
private void PlayAudio(AudioClip clip)
{
if (clip && UXComponentExtensionsHelper.AudioHelper != null)
UXComponentExtensionsHelper.AudioHelper.PlayAudio(clip);
}
[SerializeField] private Button.ButtonClickedEvent m_OnClick = new Button.ButtonClickedEvent();
public Button.ButtonClickedEvent onClick
{
get { return m_OnClick; }
set { m_OnClick = value; }
}
private void Press()
2025-12-17 13:41:50 +08:00
{
if (!IsActive() || !IsInteractable())
return;
2025-04-11 17:33:58 +08:00
2025-04-17 16:03:39 +08:00
UISystemProfilerApi.AddMarker("Button.onClick", this);
m_OnClick.Invoke();
}
}
2025-04-11 17:26:28 +08:00
}