/// <summary> /// 가장 최근의 오디오를 Fade후 일시정지 시킵니다. /// </summary> public void PauseLastBGM() { AudioObject m_CurrBGM = GetRecentPlayingAudio(); if (m_CurrBGM != null) { m_CurrBGM.FadeOutAndPause(); } }
public override void TryPlay(SoundPlayData Data) { if (!CanPlay(Data)) { return; } ///이미 플레이중인 같은 클립이 있는지 검사합니다. AudioObject AlreadyPlayingAudio = m_Channel.m_AudioActiveObjectList.Find(x => x.m_Data.m_strSoundFileName == Data.m_strSoundFileName); bool bAlreadyPlaying = AlreadyPlayingAudio != null; ///이미 플레이중인 같은 클립의 오디오가 있다면 새로운 오디오는 그 오디오를 가져오고 아니라면 풀에서 꺼내옵니다. AudioObject NewAudioObject = bAlreadyPlaying ? AlreadyPlayingAudio : m_Channel.GetAudioObject(); #region Exception ///버그에 대한 예외처리 및 디버그 코드 작성 ExceptionProcess(NewAudioObject); #endregion ///오디오 정보를 세팅합니다. NewAudioObject.SetAudioChannel(m_Channel); NewAudioObject.SetAudioGroup(NewAudioObject.m_Data.m_eAudioGroup); NewAudioObject.SetPlayData(Data); NewAudioObject.SetParent(NewAudioObject.m_Data.m_trPlace); NewAudioObject.SetPriority(m_Channel.m_nPriority); NewAudioObject.transform.localPosition = Vector3.zero; NewAudioObject.OnStop = null; m_Channel.AddAudioObject(NewAudioObject); NewAudioObject.OnStop = () => { m_Channel.DeactiveList_Enqueue(NewAudioObject); m_Channel.RemoveAudioObject(NewAudioObject); }; ///같은 BGM을 플레이하는경우 if (bAlreadyPlaying && NewAudioObject.m_bFadingOut) { ///가장 최근에 플레이한 BGM으로 교체하기위해 앞에서 빼고 뒤에 넣어줌 m_Channel.m_AudioActiveObjectList.Remove(NewAudioObject); m_Channel.m_AudioActiveObjectList.Add(NewAudioObject); } else if (!bAlreadyPlaying) { NewAudioObject.FadeVolume = 0; } AudioObject TargetObject = m_Channel.m_AudioActiveObjectList.Count > 0 ? m_Channel.m_AudioActiveObjectList[m_Channel.m_AudioActiveObjectList.Count - 1] : null; if ((bAlreadyPlaying && NewAudioObject.m_bFadingOut) || !bAlreadyPlaying) { ///가장 최근에 플레이한 오브젝트가 일시정지하려는 중이 아니면 중지시킵니다. if (TargetObject != null) { if (!TargetObject.IsPause) { if (!TargetObject.m_bFadingOut) { TargetObject.FadeOutAndPause(); } } } ///대상 BGM을 루프로 재생합니다. if (!bAlreadyPlaying) { NewAudioObject.Play(Data.m_LoadedAudioClip, NewAudioObject.m_Data.m_fDelay, 1, true, NewAudioObject.m_Data.m_fTime); } if (NewAudioObject.m_Data.m_bUseFadeIn) { NewAudioObject.FadeIn(); } } ///이미 플레이 중이지 않았다면 활성화된 리스트에 추가합니다. if (!bAlreadyPlaying) { m_Channel.m_AudioActiveObjectList.Add(NewAudioObject); } m_Channel.m_AudioFilter.RecordFilterInfo(new AudioFilterInfo(Data.m_strSoundFileName)); m_Channel.PauseBGM(); AudioClipGroup.RecordPlayingClip(Data.m_LoadedAudioClip); }