Exemple #1
0
    public override void TryPlay(SoundPlayData Data)
    {
        if (!CanPlay(Data))
        {
            return;
        }

        if (m_Channel.m_AudioObjectList.ContainsKey(Data.m_strFinalKey))
        {
            m_Channel.Stop(m_Channel.m_AudioObjectList[Data.m_strFinalKey]);
        }

        ///이미 플레이중인 같은 클립의 오디오가 있다면 새로운 오디오는 그 오디오를 가져오고 아니라면 풀에서 꺼내옵니다.
        AudioObject NewAudioObject = 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);

        //AudioObject TargetObject = m_Channel.m_AudioActiveObjectList.Count > 0 ? m_Channel.m_AudioActiveObjectList[m_Channel.m_AudioActiveObjectList.Count - 1] : null;

        NewAudioObject.Play(Data.m_LoadedAudioClip, NewAudioObject.m_Data.m_fDelay, 1, NewAudioObject.m_Data.m_bLoop, NewAudioObject.m_Data.m_fTime);

        NewAudioObject.OnStop = () =>
        {
            m_Channel.DeactiveList_Enqueue(NewAudioObject);
            m_Channel.RemoveAudioObject(NewAudioObject);
        };

        m_Channel.m_AudioActiveObjectList.Add(NewAudioObject);

        m_Channel.m_AudioFilter.RecordFilterInfo(new AudioFilterInfo(Data.m_strSoundFileName));

        AudioClipGroup.RecordPlayingClip(Data.m_LoadedAudioClip);
    }
Exemple #2
0
    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);
    }