删除按钮上的Buton组件,在按钮上挂载以下两个脚本
using UnityEngine.EventSystems;
using UnityEngine.UI;
namespace MT_Button
{
public class M_ButtonWithSound : Button
{
private bool pointerWasUp;
private M_ButtonSounds buttonSounds;
protected override void Awake()
{
base.Awake();
buttonSounds = GetComponent<M_ButtonSounds>();
}
public override void OnPointerClick(PointerEventData eventData)
{
if (buttonSounds != null)
{
buttonSounds.PlayPressedSound();
}
base.OnPointerClick(eventData);
}
public override void OnPointerUp(PointerEventData eventData)
{
pointerWasUp = true;
base.OnPointerUp(eventData);
}
public override void OnPointerEnter(PointerEventData eventData)
{
if (pointerWasUp)
{
pointerWasUp = false;
base.OnPointerEnter(eventData);
}
else
{
if (buttonSounds != null)
{
buttonSounds.PlayHoverSound();
}
base.OnPointerEnter(eventData);
}
}
public override void OnPointerExit(PointerEventData eventData)
{
pointerWasUp = false;
base.OnPointerExit(eventData);
}
}
}
using UnityEngine;
namespace MT_Button
{
[RequireComponent(typeof(AudioSource))]
public class M_ButtonSounds : MonoBehaviour
{
/// <summary>
/// 悬浮时音效
/// </summary>
public AudioClip hoverSound;
/// <summary>
/// 按下时音效
/// </summary>
public AudioClip pressedSound;
private AudioSource audioSource;
private void Awake()
{
audioSource = GetComponent<AudioSource>();
}
public void PlayPressedSound()
{
audioSource.clip = pressedSound;
audioSource.Play();
}
public void PlayHoverSound()
{
audioSource.clip = hoverSound;
audioSource.Play();
}
}
}