Hi, I am trying to create a sound manager of some sort for UI sounds.
I know I could go through and manually make every button have an event trigger that plays a sound, but I would much rather a sound manager play a sound when the mouse is over - or clicks - any button.
This way, I wouldn’t have to manually make every button play sound, and changing sounds would be much easier.
How would I go about doing this?
Attach this script to any object in the scene. Assign the 2 audioClip and Play.
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.EventSystems;
using System.Collections;
public class SoundManager : MonoBehaviour {
public AudioClip overClip = null;
public AudioClip clickClip = null;
void OnEnable () {
Button[] buttons = FindObjectsOfType<Button>();
foreach (Button button in buttons) {
EventTrigger eventTrigger = null;
if (button.gameObject.GetComponent<EventTrigger>() == null) {
button.gameObject.AddComponent<EventTrigger>();
}
eventTrigger = button.gameObject.GetComponent<EventTrigger>();
EventTrigger.Entry over = new EventTrigger.Entry();
over.eventID = EventTriggerType.PointerEnter;
over.callback.AddListener(delegate{PlayOverClip();});
if (eventTrigger.delegates == null) {
eventTrigger.delegates = new System.Collections.Generic.List<EventTrigger.Entry>();
}
eventTrigger.delegates.Add(over);
button.onClick.AddListener(delegate{ PlayClickClip(); });
}
}
public void PlayOverClip() {
AudioSource.PlayClipAtPoint(overClip, Camera.main.transform.position);
}
public void PlayClickClip() {
AudioSource.PlayClipAtPoint(clickClip, Camera.main.transform.position);
}
}