/// <summary> /// Play Bgm audio track. /// </summary> /// <param name="audio">Audio clip and settings SO</param> /// <param name="transition">Audio transition SO</param> public void Play(IAudioSO audio, BgmTransitionSO transition = null) { // Stop playing bgm(s) currently playing var outgoingTransition = transition != null ? transition.Outgoing : null; Stop(outgoingTransition); // setup audio source audio.LoadAsync().ContinueWith(() => { // play bgm var audioRef = CreateBgmReference(audio); audioRef.AudioSource.Play(); if (transition != null && transition.Incoming != null) { // apply volume transition ApplyVolumeTransition(audioRef, audio.Details.MaxVolume, transition.Incoming).Forget(); } else { audioRef.AudioSource.volume = audio.Details.MaxVolume; } audioReferences.Add(audioRef); }); }
BgmReference CreateBgmReference(IAudioSO audio) { // create new bgm GameObject var audioSourceObj = new GameObject("Bgm Source"); audioSourceObj.transform.SetParent(Mic.Transform); audioSourceObj.transform.localPosition = Vector3.zero; // create and setup bgm audio source var audioSource = audioSourceObj.AddComponent <AudioSource>(); audioSource.outputAudioMixerGroup = audioMixerGroup; audioSource.clip = audio.GetAudioClip(); audioSource.loop = audio.Details.Looping; return(new BgmReference(audio, audioSourceObj, audioSource)); }
public BgmReference(IAudioSO audioSO, GameObject gameObject, AudioSource audioSource) { AudioSO = audioSO; GameObject = gameObject; AudioSource = audioSource; }