using UnityEngine; using System; public class AudioManager : MonoBehaviour{ [SerializeField] Sound[] sounds = default; public static AudioManager instance; // Start is called before the first frame update void Awake(){ if(instance == null){ instance = this; }else{ Destroy(gameObject); return; } DontDestroyOnLoad(gameObject); foreach(Sound s in sounds){ s.source = gameObject.AddComponent(); s.source.clip = s.clip; s.source.volume = s.volume; s.source.pitch = s.pitch; s.source.loop = s.loop; } } public void Play(string name){ Sound s = Array.Find(sounds, sound => sound.name == name); if (s == null){ Debug.LogWarning("Sound: " + name + " not found!"); return; } s.source.Play(); } public void PlayOneShot(string name){ Sound s = Array.Find(sounds, sound => sound.name == name); if (s == null){ Debug.LogWarning("Sound: " + name + " not found!"); return; } s.source.PlayOneShot(s.clip); } public void Stop(string name){ Sound s = Array.Find(sounds, sound => sound.name == name); if (s == null){ Debug.LogWarning("Sound: " + name + " not found!"); return; } s.source.Stop(); } public void PlayWithRandomPitch(string name){ Sound s = Array.Find(sounds, sound => sound.name == name); if (s == null){ Debug.LogWarning("Sound: " + name + " not found!"); return; } s.source.volume = s.volume * (1f + UnityEngine.Random.Range(-s.volumeVariance / 2f, s.volumeVariance / 2f)); s.source.pitch = s.pitch * (1f + UnityEngine.Random.Range(-s.pitchVariance / 2f, s.pitchVariance / 2f)); s.source.PlayOneShot(s.clip); } }