using System.Collections; using System.Collections.Generic; using System.ComponentModel; using System.Reflection; using log4net; using PrimeTween; using UnityEngine; public class ManageableAudio : MonoBehaviour { private static ILog Log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); public int id = 0; public string audioTag = "audio"; public AudioSource AudioSource { get; set; } void Awake() { if (gameObject.TryGetComponent(out AudioSource audioS)) { AudioSource = audioS; } else { Log.Warn("Managable Audio Instance hasn't got an audio source game object" + $". Tag:{audioTag} ID:{id}"); return; } } public void PlayAudio() { if (AudioSource == null) { return; } if (!AudioSource.enabled) { AudioSource.enabled = true; } AudioSource.Play(); } public void StopAudio() { if (AudioSource == null) { return; } if (AudioSource.isPlaying) { AudioSource.Stop(); } } public void FadeOutAudio(float duration = 1) { float initVolume = AudioSource.volume; Tween.Custom(initVolume, 0, duration, onValueChange: value => AudioSource.volume = value) .OnComplete(() => { StopAudio(); AudioSource.volume = initVolume; }); } }